为存储为单个字符串的整行可变长度输入分配内存

时间:2015-10-22 14:13:36

标签: c string input

我正在学习C而且我正在阅读逐行输入的最佳方法。

基本上我想创建包含整行输入的字符串。下面的问题没有回答我应该如何处理字符串的内存分配。

How can I scan strings with spaces in them using scanf()?

我应该首先检测需要多少空间吗?怎么样?我每次需要更多空间时都应该重新分配吗?

请举例

输入来自文件或来自stdin(两者都可以但不能同时进行)

1 个答案:

答案 0 :(得分:0)

以下重复分配缓冲区存储直到读取输入(省略malloc / realloc检查):

char *myGetLine(FILE *in)
{
    char *buffer= NULL;
    int c, i, j;

    i= 0; j= 0;
    do
    {
        c= fgetc(in);
        if (i==j) {
            j += 1024;
            buffer= realloc(buffer, j);
        }
        if (c==EOF) break;
        buffer[i++]= c;
    } while (1);
    buffer[i]= '\0';
    return buffer;
}