char buff[200];
char a1[16];
char a2[8];
char a3[8];
char a4[8];
char a5[8];

int fp;

fp = fopen(FILENAME, "r");
if (fp == NULL)
       return -1;

memset(buff, 0x00, sizeof(buff));
fgets(buff, sizeof(buff), fp);

sscanf(buff, "%s %s %s %s %s", a1, a2, a3, a4, a5);

위와 같이 사용시 buff에가 "나는 이곳에서 즐거움을 가져가고 있습니다."이런글이 적혀 있다 하면
a1에는 '나는'
a2에는 '이곳에서'
a3에는 '즐거움을'
a4에는 '가져가고 '
a5에는 '있습니다.'

라고 나올것 같지만 a2~5 까지의 배열값이 8이므로 한글은 4글자 이상이면 않된다.
그이상이 될 시 그부분의 앞뒤의 값이 애상치 못한 쓰레기 값으로 들어가는 현상이 나왓다.
따라서 입력될 값이 얼마가 될지 생각하여 그보다 크게 잡아서 사용하도록한다.

위와 같이 사용시 buff에가 "나는 이곳에 즐거움 가져가 있습니다"이런글이 적혀 있다 하면
a1에는 '나는'
a2에는 '이곳에'
a3에는 '즐거움'
a4에는 '가져가 '
a5에는 '있습니다'
이렇게 입력되었다 하여도 a5가 한글입력에 배열 8개를 다쓰므로 그 앞의 data에 쓰레기가 들어갈 확률이 높다.
따라서 사용시에는 입력받을 값의 크기를 예상보다 한바이트씩 더 크게 잡는것이 하나의 tip이다.
아니면 처음부터 입력받을 data를 그 형식에 맞추어서 입력하고 가져가서 쓸수 있도록 하는것이 좋다.



=======================================================================================

sscanf 의 설명
원형 : int sscanf( const char *buffer, const char *format, [address],[address],[address] ... );
헤더 파일 : stdio.h
사용 환경 : windows, unix, linux
설명 : scanf의 기능과 유사하되 입력을 (키보드)에서 받지 않고 buffer의 문자열에서 format형태에 맞춰서 다음 address가 지정하는 곳에 data를 입력한다. format과 data갯수는 같아야한다.
리턴 : 성공시 data갯수, error시 EOF.



sscanf 의 간단한 예

#include <stdio.h>
#include <string.h>
void main()
{
int i;
char str[128];
strcpy(str,"3");
sscanf(str,"%d",&i);
printf("i is %d",i);
}

결과물 >>
    i is 3

Posted by 훈이아제
,