问题标签 [fgets]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
16764 浏览

c++ - 获取的安全替代方案

我想从标准输入中读取整行,包括两个单词之间的空格。

在 gcc 上使用时,我收到以下消息:

有什么更好的选择?

0 投票
2 回答
1994 浏览

c - 找不到新行时 fgets 不返回 NULL

好吧,我正在使用 while 循环:

而(fgets(pclientRow,1024,f)!= NULL)

在其他类中它工作正常,但在其中一个类中,当我逐行读取文件时,即使行结束它也不会退出循环,我在调试器中看到了这一点。

为什么?以前它甚至在那堂课上也能工作,现在我不知道为什么它一直带空行,直到它崩溃..

任何想法?

0 投票
3 回答
14819 浏览

c - 使用 fgets() 和 strtok() 读取带有逗号分隔符的文件

我有一个由逗号分隔的三个字段的文本文件。我的文本文件内容示例:12345,真正的编程新手,BS ME 要将文件加载到程序中,我使用了以下代码....我的问题是有时代码有效,有时无效(不出现错误消息,程序只是自行关闭并且不会继续)。我还观察到文本文件是空白的(没有写入任何内容)它会自动关闭并且不会继续。您的帮助将不胜感激。谢谢!

0 投票
1 回答
1222 浏览

c - fgets()之后换行符留在缓冲区中?

这是导致我出现问题的代码片段:

在我输入名称并按 Enter 后,getchar() 也会捕获换行符,而不是等待下一个字符。我怎样才能修复我的代码(如果可能的话,不要像另一个 getchar() 这样的hacky),以便 getchar() 在输入名称后按预期等待字符?

0 投票
2 回答
16267 浏览

c - C:使用 fread()/fgets() 而不是 fgetc() 逐行读取文本文件(具有可变长度的行)(块 I/O 与字符 I/O)

是否有getline使用fread(块 I/O)而不是fgetc(字符 I/O)的函数?

通过 .逐字符读取文件会降低性能fgetc。我们认为为了提高性能,我们可以freadgetline. 但是,这会引入超出行尾的潜在不良影响。至少,这将需要实现getline来跟踪文件的“未读”部分,这需要超越 ANSI C FILE 语义的抽象。这不是我们想要自己实现的东西!

我们已经分析了我们的应用程序,性能缓慢与我们通过fgetc. 相比之下,其余的开销实际上是微不足道的。我们总是从头到尾按顺序读取文件的每一行,并且我们可以在读取期间锁定整个文件。这可能使fread-basedgetline更容易实现。

那么,是否存在getline使用fread(块 I/O)而不是fgetc(字符 I/O)的函数?我们很确定它确实如此,但如果不是,我们应该如何实现它?

更新找到了一篇有用的文章,在 C 中处理用户输入,作者是 Paul Hsieh。这是一种fgetc基于 - 的方法,但它对替代方案进行了有趣的讨论(从有多糟糕开始gets,然后讨论fgets):

另一方面,C 程序员(甚至那些被认为有经验的程序员)的共同反驳是,应该使用fgets()作为替代方案。当然,fgets()本身并不能真正处理用户输入。除了有一个奇怪的字符串终止条件(遇到 \n 或 EOF,但不是 \0)之外,当缓冲区达到容量时选择终止的机制是简单地突然停止fgets()操作并 \0 终止它。所以如果用户输入超过了预分配缓冲区的长度,fgets()返回部分结果。处理这个程序员有几个选择;1) 简单地处理被截断的用户输入(当他们提供输入时,无法向用户反馈输入已被截断) 2) 模拟一个可增长的字符数组并通过对fgets()的连续调用来填充它. 第一个解决方案对于可变长度的用户输入几乎总是一个非常糟糕的解决方案,因为缓冲区在大多数情况下不可避免地会太大,因为它试图捕获太多的普通情况,而对于不寻常的情况来说太小了。第二种解决方案很好,只是正确实施可能很复杂。两者都没有处理fgets关于 '\0' 的奇怪行为。

留给读者的练习:为了确定调用fgets()实际读取了多少字节,可以尝试扫描,就像它所做的那样,扫描 '\n' 并跳过任何 '\0' 而不超过传递给fgets()的大小。解释为什么这对于流的最后一行是不够的。ftell()的哪些弱点阻止它完全解决这个问题?

留给读者的练习:通过在每次调用fgets()之间用非零值覆盖整个缓冲区来解决确定fgets()消耗的数据长度的问题。

因此,对于fgets(),我们只能选择编写大量代码并使用与 C 库的其余部分不一致的行终止条件,或者具有任意截止条件。如果这还不够好,那我们还剩下什么?scanf()以一种无法分离的方式将解析与读取混合在一起,并且fread()将读取字符串的末尾。简而言之,C 库让我们一无所有。我们被迫直接基于fgetc()滚动我们自己的。所以让我们试一试。

那么,是否存在getline基于fgets(并且不截断输入)的函数?

0 投票
1 回答
497 浏览

c - fgets malloc c 帮助

如果我有来自 fgets 的变量

例如 fgets(question,200,stdin); 我如何确定没有所有尾随空白元素的可变问题的大小?

0 投票
5 回答
4455 浏览

c - c 删除新行字符帮助

如果这是一个愚蠢的问题,我很抱歉!

我有这个:

但是问题变量总是在它的末尾有一个新行!我如何删除它/防止它发生?

我试过这个:

没有效果!

0 投票
3 回答
1008 浏览

c - 如何读取文件、获取数据和计算

我正在读一本书,但我想不通,试试看:(它是非英语的,所以我翻译了它)

编写一个程序,要求有 n 个学生,选择 n 个学生(以动态方式),名字是 10 个字符,并记下 5 个字符

从上面的选择中创建一个文本文件 note.txt 并附加连字符以达到 10 个字符(对于名称)。

然后读取文件并从中(仅)计算总数。然后显示注释不大于 10 的人的姓名和注释。

您必须实现 3 个函数:createStudent、createFile 和 readFile,并且不能使用全局变量。

语法:名称必须声明为 char nom[10+1](即 James,然后将添加 5 个连字符以获得 10 个字符)=> james----- 并注意:char[5+1](即15.00 或 07.50)

Tips : 要将note从文本格式转换为float格式,可以使用atof函数

我创建了 createStudent 和 createFile 函数。它们运行良好,但我无法弄清楚最后一部分(readFile 函数)。

我的文本文件有这个形状:Bart------ 04.50 Lisa------ 18.00 Homer----- 03.00

它可以编译但不起作用,我不知道为什么:(我觉得 C 语言与 java 或 c# 相比实在是太让人头疼了

你能给我一些灯吗?

0 投票
1 回答
763 浏览

php - 如何正确使用 PHP 函数'fgets'?

我假设我用fgets()错了。我试图打开一个PHP文件,然后尝试将该文件中的一行与我创建的变量匹配。如果该行匹配,那么我想将 PHP 代码写入/插入到该行正下方的文件中。例子:

现在我想将 PHP 代码写入文件,从第 480 行开始。我该怎么做?

有用的信息可能是:IIS 6 和 PHP 5.2。

0 投票
7 回答
9860 浏览

c - C语言中fgets函数的使用

我的一项任务是编写自己的 UNIX Shell。为了接收用户的输入,我使用 fgets 将输入捕获为字符串,但我不确定它是如何工作的。当我运行时:

可以说我的输入是“退出”。strlen 表示字符串长度为 5 个字符,而不是 4 个。我想做这个:

但是命令永远不会等于我想要的字符串;它就像它有一个我不确定的未知字符。它是最后的空字符吗?如何更改 if 语句以检查 fgets 捕获的用户输入是否等于“exit”?谢谢!