我有一个文件,我想要阅读并打印到屏幕上。我正在使用XCode作为我的IDE。这是我的代码......
fp=fopen(x, "r");
char content[102];
fread(content, 1, 100, fp);
printf("%s\n", content);
该文件的内容是“培根!”打印出的内容是\254\226\325k\254\226\234
。
我已经谷歌搜索了这个答案,但是C中文件I / O的文档看起来很稀疏,而且有什么不太清楚。 (至少对我来说......)
编辑:我切换到只是阅读,而不是追加和阅读,并在fread()
中切换了两个中间参数。现在打印出Bacon!\320H\320
这些是什么意思?反斜杠编号的数字或字母。我也按照建议改变了打印方式。
答案 0 :(得分:9)
您正在打开追加和阅读的文件。您应该打开读取,或将读指针移动到您要读取的位置(开头,我假设)。
FILE *fp = fopen(x, "r");
或
FILE *fp = fopen(x, "a+");
rewind(fp);
此外,fread(...)
不会将您的字符串置零,因此您应该在打印前将其终止:
size_t len = fread(content, 1, 100, fp);
content[len] = '\0';
printf("%s\n", content);
答案 1 :(得分:2)
我想,你的意思是:
printf("%s\n", content);
答案 2 :(得分:1)
也许:
fp = fopen(x, "a+");
if(fp)
{
char content[102];
memset(content, 0 , 102);
// arguments are swapped.
// See : http://www.cplusplus.com/reference/clibrary/cstdio/fread/
// You want to read 1 byte, 100 times
fread(content, 1, 100, fp);
printf("%s\n", content);
}
答案 3 :(得分:0)
可能的原因是您没有终止您读取的数据,因此printf
会打印缓冲区,直到找到字符串终结符。