假设我在 C 中有一个数组:
char *list[3] = {"Hello", "world", "!"};
我想扩展它。如果我将该数组声明为:
char **list = (char **) malloc(3 * sizeof(char *)); // Or sth. like that...
我可以调整它的大小:
realloc(list, 5 * sizeof(char *)); // Not sure now if I should use `char *` or `char **`
如果我尝试这样做:
char *list[3] = {"Hello", "world", "!"};
realloc(list, 5 * sizeof(char *)); // Not sure now if I should use `char *` or `char **`
它说它无法调整未分配的内存大小。
好的,但是我怎样才能像这样调整数组的大小呢?
最佳答案
你不能。如果你有一个静态大小的数组,你就不能改变它的大小。如果您需要能够更改大小,请不要使用静态大小的数组。
PS:你不应该忽略realloc
的返回值。无法保证 realloc
能够增加给定的内存块,因此它可能会返回一个指向全新内存块的指针(释放旧内存)。因此,您应该始终使用 realloc
返回的指针,并且永远不要假设旧指针在调用 realloc
后仍然有效。
关于c - 展开一个非指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36841682/