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

C 为存储为单个字符串的可变长度的整行输入分配内存,c,string,input,C,String,Input,我在学习C语言,我在阅读关于什么是逐行输入的最佳方式的文章 基本上,我想创建包含整行输入的字符串。下面的问题没有回答我应该如何处理字符串的内存分配 我是否应该首先检测需要多少空间?怎么用?每次我需要更多的空间时,我应该重新定位吗 请举个例子 输入来自文件或stdin(两者都可以,但不能同时进行)以下重复分配缓冲区存储,直到读取输入为止(忽略malloc/realloc检查): 以下步骤重复分配缓冲区存储,直到读取输入(忽略malloc/realloc检查): 问题太笼统了。你需要做什么?输入来

我在学习C语言,我在阅读关于什么是逐行输入的最佳方式的文章

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

我是否应该首先检测需要多少空间?怎么用?每次我需要更多的空间时,我应该重新定位吗

请举个例子


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

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


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



问题太笼统了。你需要做什么?输入来自何处?如果长度将发生变化,则您需要使用
realloc
。我在问题中包括了输入的来源,因此请删除平台上的下行端口,您可能有一个为您分配内存的函数。@Helsing如果您在Linux上,请看一下
%ms
。问题太笼统了。你需要做什么?输入来自何处?如果长度将发生变化,则您需要使用
realloc
。我在问题中包括了输入的来源,因此请删除平台上的下行端口,您可能有一个为您分配内存的函数。@Helsing如果您在Linux上,请查看
%ms
。为什么要使用单独的缓冲区
buf
,并进行所有复制?如果有空间,只需将其存储到
缓冲区中,或者重新分配,然后再存储似乎更有意义。更好,但我认为您在重新分配时未能存储传入字符。尽管如此:返回缓冲区,使函数可以作为可重用的构建块使用,这可能是有意义的。另外:您不需要初始malloc<代码>buff=realloc(空,新大小)用作expected@unwind-修正了你的评论。有什么理由保留否决票吗?为什么要使用一个单独的缓冲区
buf
并进行所有复制?如果有空间,只需将其存储到
缓冲区中,或者重新分配,然后再存储似乎更有意义。更好,但我认为您在重新分配时未能存储传入字符。尽管如此:返回缓冲区,使函数可以作为可重用的构建块使用,这可能是有意义的。另外:您不需要初始malloc<代码>buff=realloc(空,新大小)用作expected@unwind-修正了你的评论。有什么理由不投反对票吗?
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;
}