从文件中读取C,它显示为"@"

İlk*_*ğlı 1 c file file-processing

我正在尝试用C语言读取文件.但是当我读到并将其写入stdout时,它也会打印@在我的文件中没有.是什么原因?

    #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;
        }
}
Run Code Online (Sandbox Code Playgroud)

输出:

1234567891 @ 2345678912 @ 3456789 12 @ 3456789 12 @

文件:123456789123456789123456789

tom*_*asz 6

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

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