我正在尝试使用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; }