1

我正在尝试读取 C 中的文件。但是当我读取并将其写入标准输出时,它会打印 @ 也没有在我的文件中。是什么原因?

    #include <stdio.h>

int main() {

FILE *fp;
int br;
char buffer[10];
int i;
fp = fopen("a.txt","r");
while(1) {
        br = fread(buffer,1,10,fp);
        printf("%s",buffer);
        if (br==0)
                break;
        }
}

输出:

1234567891@2345678912@3456789 12@3456789 12@

档案:123456789123456789123456789

4

2 回答 2

6

您的fread调用最多可以正确读取 10 个字节,但要求字符串以空值结尾printf%s您可以通过将缓冲区的大小增加到 11 个字节并在每次调用后fread在数据末尾写入零来修复它,即buffer[br] = 0;.

另一种方法是printf通过调用来判断数据的大小printf("%.*s", br, buffer);。你不需要修改你的缓冲区数组。

于 2012-05-24T17:34:50.557 回答
2

动态分配缓冲区并将其初始化为零,如下所示:

  char *buffer = calloc(1, 11);

   <do your read loop>

   free(buffer)

这样,您将在末尾获得零字节,这将在打印时终止字符串。当 C 打印一个字符串时,它期望它以 NULL(或 0)字节终止。

于 2012-05-24T17:29:32.963 回答