如何在C语言中向字符串数组中添加元素?

3

如何在C语言中向字符串数组中添加新元素?


你的数组已经满了吗?你想增加数组的大小吗? - David Weiser
看这个,https://dev59.com/D2445IYBdhLWcg3wytMU#4694762 - Michael Smith
所以这是一个字符串数组,还是一个字符串(字符数组)?尽管相似,但两种情况都有各自的陷阱。 - PeterK
4个回答

5
如果是字符串,您只需要使用strcat()一些文档)。但要注意,您只能扩展您允许的内存大小。您可能需要像其他帖子中所说的那样使用realloc()

2

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';

我不明白那个怎么可能起作用,那段代码似乎在最后一个元素之前给数组/字符串加了一个空终止符? - user179169
在编译器中尝试一下:在这个上下文中,str[i++] = new_char; 相当于 str[i] = new_char; i++; 如果还有疑问,请参考 http://stackoverflow.com/q/4865599/191776 - user191776

1
如果你想扩展数组,你需要重新分配内存。可以查看一下 realloc 函数。

1
这取决于你如何定义数组。
如果你已经静态分配了一个固定长度的数组,那么你可以直接将数据复制到第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] 吗?谢谢。 - user179169
@James:你可以修改从024的元素,否则写入错误的内存区域可能导致数据丢失和/或程序崩溃。foo[1]是指向第二个数组元素,也就是第二个字符串的指针。 - YasirA
你从哪里获取的strdup?它看起来不像标准版本。 - bstpierre
@bstpierre:你说得对,代码已更新。 @Yasir:感谢解释! - Aif
你的数组声明语法错误(应该是char foo[25][25])。另外,你不能仅仅将一个动态分配的字符串(指针)赋值给一个数组。尝试编译你的示例代码... - Georg Fritzsche

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接