使用realloc有什么问题
我正在尝试使用realloc从用户那里获得无限制的输入。这就是我到目前为止所做的:使用realloc有什么问题,c,realloc,C,Realloc,我正在尝试使用realloc从用户那里获得无限制的输入。这就是我到目前为止所做的: int getCharactersFromUser(char* arr,char terminator) { char c = getch(); int length =0; while(c!=terminator) { arr = realloc(arr, sizeof (arr)*(++length)); arr[length-1]=c; c = getch(); }
int getCharactersFromUser(char* arr,char terminator)
{
char c = getch();
int length =0;
while(c!=terminator)
{
arr = realloc(arr, sizeof (arr)*(++length));
arr[length-1]=c;
c = getch();
}
return length;
}
我用arr调用这个方法,如下所示:char*unknownArr=calloc0,sizeof*unknownArr;
int length=getCharactersFromUser&unknownArr,用于列表的TEMINATOR;
此处,列表的TEMINATOR_是eof如果要更改调用者的arr副本,则需要将指针传递给指针 另外,sizeof arr提供了char*的大小;您的代码似乎采用sizeofchar。这保证为1,允许简化内存大小的计算
int getCharactersFromUser(char** arr,char terminator)
{
*arr = NULL; // first call to realloc will crash if `*arr` is uninitialised in caller
char c = getch();
int length =0;
while(c!=terminator)
{
*arr = realloc(*arr, ++length);
(*arr)[length-1]=c;
c = getch();
}
return length;
}
看看sizeofarr的值是多少。另外:如果你想使用EOF,你的字符需要一个int。EOF不能保证适合一个字符。这似乎也是一种情况,在这种情况下,最好以2的幂进行realloc,每次加倍。当然,这意味着在重新分配之间可以读取多个字符*arr*arr=malloc1;还有,@JoshuaTaylor说了些什么。如果maxlen==curlen*arr=realloc*arr,maxlen*=2@Jonahnson如果传入未初始化的指针,您的版本将崩溃。OP必须选择防止哪种形式的误用,并适当记录其功能。你能解释一下为什么我需要指向指针的指针吗?指向起始地址的指针还不够吗?如果希望调用方能够访问str,则必须将其变量的地址传递到getCharactersFromUser中。他们的变量是char*,所以这个的地址是char**。