【发布时间】:2011-01-23 14:39:14
【问题描述】:
这对于查找错误来说是一个很好的问题。 不?至少对初学者来说还可以。
#define SIZE 4
int main(void){
int chars_read = 1;
char buffer[SIZE + 1] = {0};
setvbuf(stdin, (char *)NULL, _IOFBF, sizeof(buffer)-1);
while(chars_read){
chars_read = fread(buffer, sizeof('1'), SIZE, stdin);
printf("%d, %s\n", chars_read, buffer);
}
return 0;
}
使用上面的代码,我正在尝试使用重定向./a.out < data 从文件中读取。输入文件内容:
1line
2line
3line
4line
但我没有得到预期的输出,而是混入了一些图形字符。 怎么了?
提示:(由 Alok 提供)
sizeof('1') == sizeof(int)- sizeof("1") == sizeof(char)*2
所以,用 1 代替 :-)
查看this post 使用 fread 的缓冲 IO 示例。
【问题讨论】:
-
我不懂C,但可能是文本编码的东西。
-
我猜不是,因为使用 scanf,我得到了正确的输出。
-
fread(buffer, sizeof('1'), SIZE, stdin);为什么是sizeof('1')?只需改用1。 -
@Gentlmean:同样的事情。
-
chars_read如何递增?