簡體   English   中英

C-fgets如何與多個電話一起使用

[英]C - How fgets works with mutiple calls

我有以下代碼:

int i = 0;
char ar[500];

while(i < 20)
{
    printf("Type a line: ");
    fgets(ar, 500, stdin);
    fprintf(fp,"%s", ar);
    i++;
}

基本上,我試圖打開一個文件,然后從用戶那里獲取20行輸入並將其存儲在數組中,然后將其打印到文件中。 它工作正常,但我不明白fgets在while循環中如何工作。 據我了解,當i = 0時,fgets將第一行存儲到ar [500]中,而fprintf將其輸出到文件中,當i = 1時,fgets將第二行存儲到ar [500]中,但是現在ar [500]有2行,但是為什么當我遞增1時,為什么fprintf僅將第二行打印到文件,而不是所有2行,依此類推。

fgets總是開始在arr [0]處填充數組。 在每次迭代時,前一行將被覆蓋。 fgets將在arr中為您添加空終止符,因此僅當前讀取的行將輸出到fp指向的FILE中。

char *fgets(char * restrict s, int n, FILE * restrict stream); (C11 7.21.7p2)

2 fgets函數從stream指向的流到s指向的數組中讀取的字符數最多少於n指定的字符數。 在換行符(保留)或文件結束之后,不會讀取其他字符。 在將最后一個字符讀入數組后,立即寫入空字符。

fgets讀取的第一個字符將始終存儲在s[0] ,依此類推,直到最多s[n - 1]或遇到的第一個換行符(它是最后存儲的字符)。 讀取的最后一個字符之后的元素將設置為'\\0' ,從而終止字符串。

即有效地fgets調用將覆蓋數組中的k + 1第一個元素,其中k為行的長度或n ,取較小者, 1表示空終止。

要存儲20行,您需要一個數組數組:

char ar[20][500];

然后讀入ar[i]

每次都將覆蓋緩沖區ar

fgets具有原型char *fgets(char *str, int n, FILE *stream) 它將從stream讀取最多n-1字符並將它們寫入str ,然后添加'\\0'字符。

關於:“但是ar [500]現在有2行,”

不,函數fgets()不追加。

而是覆蓋。

在發布的代碼中,始終從ar[0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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