[英]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++ 網站上找到這兩個函數的詳細文檔( fread 、 fgets )。 請參閱它們以了解深度和技術差異。
簡而言之, 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.