c/c++语言开发共享如果你不知道要读取的字符数,如何使用fgets?

我需要读取一个文件并将文本从它发送到一个字符串,以便我可以解析它。 但是,程序不会准确知道文件的长度,所以如果我想使用fgets() ,或者有更好的选择,我该怎么办?

注意:

 char *fgets(char *str, size_t num, FILE *stream); 

    不要忘记fgets()读取一行,但要有足够的空间。

    人类很少写行超过… 80,256,选择一个数字……字符。 POSIX建议行长度为4096.所以,我通常使用:

     char buffer[4096]; while (fgets(buffer, sizeof(buffer), fp)) { ...process line... } 

    如果您担心有人可能在一行中提供超过4K的数据(并且机器生成的文件,例如HTML或JSON,可能包含该数据),那么您必须决定下一步该做什么。 您可以执行以下任何操作(并且可能还有其他一些我未提及的选项):

    你可以迭代地使用fgets,但更简单的替代方法是(stdio.h) getline 。 它在POSIX中,但它不是标准C.

    既然你正在使用C ++,你可以使用像iostream的getline这样的std :: string函数吗?

    如果您不在POSIX系统上并且没有getline可用,请查看Chuck Falconer的公共域ggets / fggets函数 ,这些函数动态增加缓冲区以消耗整行。 (这个链接现在似乎已经关闭,但archive.org有一份副本 。)

    分配缓冲区( str指向的缓冲区),并将缓冲区的大小传递给num 。 占用的实际空间仅为fgets读取的文本的长度。

    就像是:

     char str[1000]; fgets(str, 1000, &file); 

    如果下一行在换行符之前只有10个字符,则str将保存这10个字符,换行符和空终止符。

    编辑 :以防万一有任何混淆,我不打算听到上面的声音,好像缓冲区中的额外空间没有被使用。 我只是想说明你不需要提前知道你的字符串将持续多长时间,只要你可以在它上面放一个最大长度。

    需要了解更多c/c++开发分享如果你不知道要读取的字符数,如何使用fgets?,也可以关注C/ C++技术分享栏目—计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享如果你不知道要读取的字符数,如何使用fgets?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980052.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐