fgets和fread之间的区别

4 c post cgi

我有以下代码:

#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;

}
Run Code Online (Sandbox Code Playgroud)

当我使用fgets时,它会截断显示的数据.但是当我使用fread时,它会显示所有内容.顺便说一句,这是使用post方法上传html文件的cgi脚本.任何帮助都会受到极大的抨击.

Jac*_*ack 11

这两个函数都可以在C++网站上找到很好的文档(fread,fgets).请参阅它们的深入和技术差异.

简而言之,fgets将读取直到第一个新行,一次读取的最大字节数,或者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).
}
Run Code Online (Sandbox Code Playgroud)