在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;
}

注意:永远不要使用gets!它不进行边界检查,并且可能溢出缓冲区

10-08 11:29