如何确定 fgets 是否在读取所有字母之前停止?

2024-04-05

我做了这样的事情:

char buf[100];              
int n = 0;                  
char save[100][100];        

while (fgets(buf,100, file)!=NULL) {
    strcpy(save[n], buf);
    printf("%s",buf);
    n++;
}

我开了一个FILE = *file之前有错误处理。 我只想读取少于或等于 100 个字符的行。那些具有更多字符的字符,我想忽略并将一些特殊消息写入“保存”数组或perror or stout溪流。

然而,我怎么可能知道我是否正好得到了 100 个字符或者我的fgets已经读到极限了?

我怎么知道我一开始是否获得了超过 100 分?


不要使用fgets(), use getline() http://pubs.opengroup.org/onlinepubs/9699919799/functions/getdelim.html. With fgets(),一旦你读到了太长的一行(无论你如何识别它),你就必须继续阅读该行并丢弃它,直到到达新行。换句话说,您需要跟踪状态,如果您使用则不需要跟踪状态getline()因为它给你整行,并告诉你它有多长:

FILE *fp = // fopen() however you need to

char *lineArray[ MAX_LINES ];
int ii = 0;

char *line = NULL;
size_t len = 0UL;

// loop until getline() fails
for ( ;; )
{
    ssize_t lineLen = getline( &line, &len, fp );
    if ( lineLen == -1L )
    {
        break;
    }

    if ( lineLen > 100L )
    {
        // handle too-long line
    }
    else
    {
        lineArray[ ii ] = strdup( line );
        ii++;
    }
}

您可能想删除任何尾随的newline在将行复制到数组之前从每行中提取字符。

请注意,我使用了strdup()复制该行 - 这不是 C 标准函数,但这是 POSIX http://pubs.opengroup.org/onlinepubs/9699919799/functions/strdup.html.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何确定 fgets 是否在读取所有字母之前停止? 的相关文章

随机推荐

  • bookshelf.js 计数方法

    我一直在寻找如何使用 Bookshelf js 进行基本计数 例如 SELECT COUNT something FROM table 但无济于事 我有什么遗漏的吗 或者它只是与手动选择查询一起使用 Thanks 目前这是一个手动查询 例如
  • 通过 Powershell 关闭时无法停止所有 Excel 进程

    使用此代码 我打开 excel 使用visible false 以便用户看不到它 写入工作簿 然后在脚本结束后打开 excel 使其可见 或完全关闭它而不保存 当我保存 Excel 使其保持打开状态 结束脚本 然后稍后手动关闭 Excel
  • 如何将 JavaScript 中的数字除以任意精度(例如小数点后 28 位)

    我知道https floating point gui de https floating point gui de 事实上 有许多库可以帮助处理大数 但令人惊讶的是 我找不到任何可以处理除法运算结果中小数点后 19 位以上的库 我花了几个
  • 在 Windows 中批量将 cp1252 转换为 utf-8

    所以 我一直在尝试使用我在网上找到的提示和矩阵 将大型java源代码树从cp1252转换为Windows中的UTF 8 特别是here https stackoverflow com a 9310774 问题是 我在 Windows 上 我
  • 将 Select 语句放在 Hibernate 事务上

    我已经阅读了一段时间有关 Hibernate 的内容 但我似乎无法理解有关 Hibernate 的一个概念Transaction 在我访问过的一些网站上 Select语句处于事务模式是这样的 public List
  • 使用短语构建语料库

    我的文件如下 doc1 very good very bad you are great doc2 very bad good restaurent nice place to visit 我想让我的语料库与 这样我的最后DocumentT
  • 将点云转换为深度/多通道图像

    我有一个通过使用立体相机扫描平面生成的点云 我已经生成了法线 fpfh 等特征 并使用这些信息我想对点云中的区域进行分类 为了能够使用更传统的 CNN 方法 我想将此点云转换为 opencv 中的多通道图像 我将点云折叠到 XY 平面 并与
  • 如何在 Safari HTML5 中启用表格行的重影效果?

    当我拖动项目时没有重影效果 table行 在 Safari 上 我用table所以这是一个tr 幻影效果是指您可以看到跟随鼠标移动的项目 在 Chrome FF 上它可以工作 有人知道为什么吗 我注意到它不仅在tr td 如果我使用li o
  • RSA 加密 AES 密钥的强度

    我目前正在开发一个在客户端和服务器之间传输数据的系统 并且想知道我计划使用的加密强度是多少 我的想法是拥有一个私钥 公钥 RSA 密钥对 并将公钥分发给每个客户端 将私钥仅保留在服务器上 然后 每个客户端将生成自己的 AES 密钥并使用 R
  • 绝对定位与固定定位

    我有一个自定义对话框 当我单击按钮时会显示该对话框 显示对话框后 我会显示一个覆盖图 覆盖层的高度和宽度为100 x 100 问题来了 高度 100 只是获取浏览器窗口的高度 所以当我在页面上向下滚动时 它仍然位于顶部 如何将其高度设置为整
  • 如何获取C中最右边设置位的位置

    int a 12 例如 12 的二进制是 1100 所以答案应该是 3 因为设置了右起第 3 位 我想要最后一个最设置位的位置a 谁能告诉我该怎么做 NOTE 我只想要位置 在这里我不想设置或重置该位 所以它与 stackoverflow
  • 如何对我的方法输入参数设置验证约束?

    以下是实现此目标的典型方法 public void myContractualMethod final String x final Set
  • Android:带有 com.android.email 的 ACTION_SEND_MULTIPLE

    我正在尝试将 Intent 中的多个附件发送到电子邮件应用程序 而不是 Gmail 应用程序 我在用着 Intent emailIntent new Intent android content Intent ACTION SEND MUL
  • 在 docker exec 命令中使用“*”

    我正在尝试在运行的 docker 容器中运行特定命令 Docker exec t containername1 ls tmp sth 作为回报我收到 ls cannot access tmp sth No such file or dire
  • 伊莎贝尔语中“case _ of _”是什么意思

    在读的时候这个关于商类型的答案 https stackoverflow com a 67237629 14656198 我偶然发现了这个结构 case of 经检查手册 https isabelle in tum de doc isar r
  • Bootstrap - 谁能给我任何例子,如何设置 JS 按钮?

    我正在玩 Bootstrap有状态按钮 http twitter github com bootstrap javascript html buttons 特别是与加载状态 但仍然找不到正确的设置来使其正常工作 我有一个基于 AJAX 的简
  • tcl 暂停并等待按键继续

    我正在 tcl 中寻找一种方法来暂停脚本 例如在使用 puts 进行一些输出之后 并等待用户按下按键 然后再继续输出剩余的文本 你只需使用gets从标准输入读取 proc pause message Hit Enter to continu
  • 如何定义正则表达式(preg_replace)以删除数字字符之间的空格

    我有这样的字符串 str old iccid 809831 3245 345 new iccid 999000 112221 如何定义正则表达式以删除 PHP 中数字字符之间的空格字符 成为此输出 output old iccid 8098
  • 删除了 C# 和 IoC 传递依赖项

    我有一个使用 IoC windsor 的解决方案 解决方案中的项目如下 接口 保存我将使用的所有接口合约 IoC Installers 保存我的依赖项的所有安装程序 参考实现和接口 IoC 包含一个包含 IoC 容器的单例类 该类执行容器的
  • 如何确定 fgets 是否在读取所有字母之前停止?

    我做了这样的事情 char buf 100 int n 0 char save 100 100 while fgets buf 100 file NULL strcpy save n buf printf s buf n 我开了一个FILE