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