fread()将奇怪的东西放入char数组中

时间:2012-02-24 15:19:53

标签: c xcode file-io

我有一个文件,我想要阅读并打印到屏幕上。我正在使用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这些是什么意思?反斜杠编号的数字或字母。我也按照建议改变了打印方式。

4 个答案:

答案 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会打印缓冲区,直到找到字符串终结符。