FGET和FREAD之间的区别 [英] Difference between fgets and fread

查看:27
本文介绍了FGET和FREAD之间的区别的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码:

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

int main(void)
{
    int lendata;
    printf("Content-type:text/html

");
    printf("<html><body>");

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

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

    free(buf);

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

当我使用fgets时,它会截断显示的数据。但当我使用fread时,它会显示所有内容。顺便说一句,这是使用POST方法上传html文件的CGI脚本。如有任何帮助,将不胜感激。

推荐答案

这两个函数都可以在C++网站上找到详细的文档(freadfgets)。有关深度和技术差异,请参考它们。

简而言之,fgets将一直读取到第一个新行、一次读取的最大字节数或EOF,其中先发送的是fread,而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).
}

这篇关于FGET和FREAD之间的区别的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆