簡體   English   中英

C從文件中讀取,讀取為“ @”

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM