c - 展开一个非指针数组

标签 c arrays

假设我在 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/

相关文章:

c - 如何从字符串中检索作为关键字的标记?

C传递终端命令并打印答案

android - 从 android 应用程序运行 C 二进制文件 : particulare case

java - 在 java 属性文件中表示数组的更好方法

c - 无法访问结构数组中的值

c - 增加 FD_SETSIZE 的限制并选择

Java int 数组随着起点和终点递增

java - 通用对象的操作

javascript - JavaScript 中的分区细化算法

php - 当我将 print_r() 应用于 PHP 中的数组时,为什么会得到 "Resource id #4"?