我正在尝试使用 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();
}
return length;
}
我用这样的 arr 调用这个方法:char *unknownArr = calloc(0,sizeof *unknownArr);
int length = getCharactersFromUser(&unknownArr,TEMINATOR_FOR_LIST);
这里 TEMINATOR_FOR_LIST
是 eof
最佳答案
如果要更改调用者的arr
副本,则需要将指针传递给指针。
此外,sizeof (arr)
为您提供了 char*
的大小;您的代码似乎假设 sizeof(char)
。这保证为 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;
}
关于c - 这个 realloc 使用有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20337555/