在C控制台程序中读取整行代码的最简单方法是什么

推荐答案

您需要动态内存管理,并使用fgets函数读取您的行.然而,似乎无法看到它读了多少个字符.所以你使用fgetc:

char * getline(void) {
    char * line = malloc(100), * linep = line;
    size_t lenmax = 100, len = lenmax;
    int c;

    if(line == NULL)
        return NULL;

    for(;;) {
        c = fgetc(stdin);
        if(c == EOF)
            break;

        if(--len == 0) {
            len = lenmax;
            char * linen = realloc(linep, lenmax *= 2);

            if(linen == NULL) {
                free(linep);
                return NULL;
            }
            line = linen + (line - linep);
            linep = linen;
        }

        if((*line++ = c) == '\n')
            break;
    }
    *line = '\0';
    return linep;
}

Note:永远不要使用get!它不执行边界判断,可能会使您的缓冲区溢出

C++相关问答推荐

C/C++中的状态库

增加getaddrinfo返回的IP地址数量

无法用C++编译我的单元测试

从纯C中访问通用项对话框

Ruby C Api处理异常

每个 struct 变量在C中都有自己的命名空间吗?

MacOS下C++的无阻塞键盘阅读

如何使用libgpio(d)为Raspberry Pi编译C程序?

收到不兼容的指针类型警告,因为函数的返回不是空*,而是 struct 指针

初始成员、公共初始序列、匿名联合和严格别名如何在C中交互?

不使用任何预定义的C函数进行逐位运算

如何在不使用字符串的情况下在c中编写函数atof().h>;

Go和C中的数据 struct 对齐差异

Makefile无法将代码刷新到ATmega328p

Dlsym()的手册页解决方法仍然容易出错?

生成的头文件不包括用户定义的文件

未为同一文件中的函数执行DirectFunctionCall

在NASM中链接Linux共享库时出错-';将R_ X86_64_;foo';

使用共享变量同步多线程 C 中的函数

Makefile - 将 .o 文件放入子文件夹中