【发布时间】:2011-01-31 16:47:02
【问题描述】:
如何在 C 中向字符串数组添加新元素?
【问题讨论】:
-
您的阵列是否已满?您是否要增加数组的大小?
-
那么它是一个字符串数组,还是一个字符串(一个字符数组)?虽然相似,但两种情况都有自己的缺陷。
如何在 C 中向字符串数组添加新元素?
【问题讨论】:
如果是字符串,您只需使用 strcat() (some docs)。请注意,您只能扩展您允许的内存。你可能需要realloc(),就像另一张海报说的那样。
【讨论】:
C 中的字符串由字符数组组成。为了使用 printf 调用正确打印字符串,它必须以 NULL 字符 (\0) 终止。
添加一个新元素,即。一个字符,到字符串的末尾,移动到 NULL 字符并用新字符替换它,然后在它后面放回 NULL。这假设已经有足够的空间可供新角色使用。
char str[100];
char new_char = 'a';
int i = 0;
...
// adds new_char to existing string:
while(str[i] != '\0')
{
++i;
}
str[i++] = new_char;
str[i] = '\0';
【讨论】:
str[i++] = new_char; 等同于 str[i] = new_char; i++; 如果仍有疑问,请参阅 stackoverflow.com/q/4865599/191776
如果你想扩展你的数组,你需要为它重新分配内存。查看realloc。
【讨论】:
这取决于你所说的数组。
如果你已经静态分配了一个固定长度的数组,那么你可以只复制第 i 个元素中的数据。
char foo[25][25];
strcpy(foo[1], "hello world"); /* "puts" hello world in the 2nd cell of the array */
如果你使用过动态数组,首先要确保还有空间,否则分配内存,然后以同样的方式放置你的项目。
【讨论】:
strdup(foo[1], "hello world");,foo[1] 是否应该始终位于索引 1 处?假设数组中有 5 个元素,那么我会使用 foo[6] 吗?谢谢
0 修改为24,否则您写入内存中的错误区域,这可能会导致数据丢失和/或程序崩溃。 foo[1] 是指向第二个数组元素,即第二个字符串的指针。
strdup?它看起来不像标准版本。
char foo[25][25])。此外,您不能只将动态分配的字符串(指针)分配给数组。尝试编译您的示例...