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();
    }
return length;
}

我用这样的 arr 调用这个方法:char *unknownArr = calloc(0,sizeof *unknownArr); int length = getCharactersFromUser(&unknownArr,TEMINATOR_FOR_LIST); 这里 TEMINATOR_FOR_LISTeof

最佳答案

如果要更改调用者的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/

相关文章:

C - 传递分配的指针并在单独的函数中使用 realloc

无法使用 execve 传递第二个环境变量

java - 为 Ruby 编写 C 扩展的好处

c - 无法使用继续控制流找到质数

c - 将列表传递给函数以在 C 中用可变数量的成员填充列表

c - 在c中分配空间并连接到无符号字符数组

c - 左填充文本

c - 为什么 strcpy 在使用大小为 1 的目标字符串时省略源字符串中的第一个字符?

c - 在动态结构数组中使用 realloc

c - 如何修复“"Pointer being realloc' d 未分配”错误