AIX에서 파일읽기. fgetc 가 EOF 를 만났을때 char 로 받기.
Posted 2008/12/19 12:41, Filed under: 나의 길/에러 극복하기
int read_file2buf(char *filename, char *buf)
{
FILE *fp;
int i;
char c;
if(( fp = fopen(filename, "r"))==NULL) {
ERROR("file(%s) open error!\n", filename);
return(-1);
}
i = 0;
while( (c = fgetc(fp)) != EOF ) {
buf[i++] = c;
}
fclose(fp);
buf[i] = '\0';
return(i);
}
위의 소스는 뭐가 잘못됐을까.
그냥 보기에는 무난해 보인다
허나..
while( (c = fgetc(fp)) != EOF )
보기에는 이상한게 없어보이지만
AIX 에서는 EOF 비교를 못해서 buf 끝까지 가버린다.
EOF를 찍어보면 -1 이 나온다.
그런데 그때 c 를 찍으면 255가 나온다.
눈치챘는가..
AIX 컴파일러는 char가 default 값으로 unsinged char 인것으로 보인다.
fgetc를 통해서 -1 이 나왔지만
c 가 unsigned 형이니 -1 의 unsinged 값인 255가 나오는것이다.
해결할려면
char c 를 int c로 바꿔준다.
오늘도 한건 배운다
Response :
0 Trackback
,
4 Comments
Trackback URL : http://simplelife.pe.kr/tc/trackback/621
-
나랑 똑같은 문제를 풀었었군 ㅎㅎㅎ
-
그런건 미리미리 공유해야징~
-
-
두 사람 댓글 대화가 왤케 서글프냐... 흑흑흑
-
자네도 동참하게.. ㅋㅋ
-