[英]C reading from file, it reads “@”
我試圖讀取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;
}
}
輸出:
1234567891 @ 2345678912 @ 3456789 12 @ 3456789 12 @
文件:123456789123456789123456789
您的fread
調用最多可以正確讀取10個字節,但是帶有%s
printf
要求字符串以null終止。 您可以通過將緩沖區的大小增加為11個字節並在每次fread
調用之后在數據末尾寫入零來解決此問題,即buffer[br] = 0;
。
另一種方法是通過調用printf("%.*s", br, buffer);
來告訴printf
您的數據大小是多少printf("%.*s", br, buffer);
。 然后,您不需要修改緩沖區數組。
動態分配緩沖區,並將其初始化為零,如下所示:
char *buffer = calloc(1, 11);
<do your read loop>
free(buffer)
這樣,您將在末尾得到零字節,這將在打印字符串時終止該字符串。 當C打印一個字符串時,它期望它以NULL(或0)字節終止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.