[CODE]char ch; while( (ch = fgetc( f )) != EOF ) { printf("%c", ch ); }[/CODE] 언뜻보기에는 맞는 것 같이 보인다. 하지만, 여기에는 isprint 못지 않은 두려운 버그가 숨어 있다. fgetc 의 원형은 다음과 같다. [CODE]int fgetc( FILE * );[/CODE] fgetc의 return 값이 int 란다. 그리고, 문자하나를 되돌리는 함수라니.. 각설하고 위 코드는 다음과 같아야한다. [CODE]int ch; while( (ch = fgetc( f )) != EOF ) { printf("%c", (char) ch ); }[/CODE] fgetc의 설명을 보면, 파일의 끝이나 오류를 만났을 때 EOF를 되돌린단다. unsign..
char ch = 'X'; 위와 같이 되어 있을 때, 다음과 같이 사용하는 것이 옳은 것이냐하는 것인데, if( isprint( ch ) ) { blah; } 경고감이다. 왜냐하면, isprint의 원형은 [CODE]int isprint (int c);[/CODE] 이기 때문이며, 여기에는 isprint에 넣는 인자의 철학과 우리가 흔히 사용하는 문자형 변수의 차이에서 오는 괴리감이 있는 것이다. int 는 char가 표현할 수 있는 것보다. 일반적으로 더 많은 범위를 받을 수 있는데 (sizeof( char ) == sizeof( int ) 인 구조를 제외하면 항상 그렇지 않는가?) 그러면서도 signed 형이라는 것이다. 그런데, char 는 명시적으로 signed char, unsigned char..
김준동이... 갑자기 오늘 그대가 그립네그려... 이유야 있겠지만, 그냥 보고 싶구랴...
- Total
- Today
- Yesterday
- Linux
- 커피
- TCP/IP
- perl
- 오픈소스
- MySQL
- Subversion
- VIM
- url
- 클레로덴드럼
- writely
- macosx
- 대화
- 구근
- BlogAPI
- 퀴즈
- 킹벤자민
- OpenID
- SVN
- SSO
- tattertools
- 식물
- 디버깅
- JavaScript
- ssh
- nodejs
- 수선화
- 덴드롱
- Tattertools plugin
- 벤자민
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 | 31 |