c - 为什么这个 fgets() 循环永远不会结束?

标签 c stream while-loop buffer fgets

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

#define BUF_SIZE 1024

int main ()
{
    char buffer[BUF_SIZE];
    int contentSize = 1; 

    char* content = (char*)malloc(sizeof(char) * BUF_SIZE);
    content[0] = '\0';

    while(fgets(buffer, BUF_SIZE, stdin))
    {
        contentSize = contentSize + strlen(buffer);
        content = (char*)realloc(content, contentSize);
        strcat(content, buffer);
    }

    return 0;
 }

我正在尝试读取用户输入的所有内容(甚至是空白字符),我非常接近让它正常工作,但循环永远不会结束。 fgets() 一直要求更多输入,请问我该如何解决。

最佳答案

fgets()返回指向您传递给它的缓冲区的指针(最好不是 NULL 指针),直到它无法从文件中读取更多行。

当然,如果从标准输入读取,它总是会等待另一行,所以你必须显式地发送一个 EOF 到终端,以便它报告文件结束。您可以按 <ctrl> + <D> 来完成,例如。

关于c - 为什么这个 fgets() 循环永远不会结束?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18681873/

相关文章:

c - fgets 似乎会导致写入文件

安卓视频流

c++ - 使用同一个对象写入宽字符和字符写入同一个文件

Python - 在 while 循环期间将列表附加到列表 - 结果不符合预期

c++ - 当循环失败时,读取 int 和 string C++

java - 如何将从控制台添加的字符串中的元素添加到java中的列表中

c - C中分配的结构指针的"default value"

c - 将 size_t 变量设置为 -1

python - 如何知道 CPython 的哪一部分是用 C 实现的?

java - 从字节数组创建 java.awt.Image