簡體   English   中英

fgets 和 fread 的區別

[英]Difference between fgets and fread

我有以下代碼:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void)
{
    int lendata;
    printf("Content-type:text/html\n\n");
    printf("<html><body>");

    lendata = atoi(getenv("CONTENT_LENGTH"));
    char *buf = malloc(lendata+1);
    fread(buf,lendata,1,stdin);

    printf("%s\n<br>",buf); 
    printf("%d",lendata);   

    free(buf);

    printf("</body></html>");
    return 0;
}

當我使用fgets ,它會截斷顯示的數據。 但是當我使用fread ,它會顯示所有內容。 順便說一下,這是使用 post 方法上傳 html 文件的 CGI 腳本。 任何幫助將不勝感激。

可以在 C++ 網站上找到這兩個函數的詳細文檔( freadfgets )。 請參閱它們以了解深度和技術差異。

簡而言之, fgets將讀取到第一個新行,一次讀取的最大字節數或EOF ,以先發送者EOF ,而fread將讀取特定數量的單詞(我將單詞定義為一個字節塊,例如組4 個字節)並在達到該限制或讀取 0 個字節時停止(通常表示EOF或錯誤)。

如果您想使用任一函數讀取直到EOF則它如下所示:

char buffer[ buff_len ];

// ... zero-fill buffer here.

while ( fgets( buffer, buff_len, stdin ) != EOF ) {
  // ... do something with buffer (will be NULL terminated).
}

while ( fread( buffer, sizeof( buffer[ 0 ] ), sizeof( buffer ) / sizeof( buffer[ 0 ] ), stdin ) != 0 ) {
  // ... do something with buffer (not necessarily NULL terminated).
}

fgets在遇到\\n時停止讀取,而fread讀取。

暫無
暫無

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

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