【问题标题】:How to add an element to a string array in C?如何将元素添加到C中的字符串数组?
【发布时间】:2011-01-31 16:47:02
【问题描述】:

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

【问题讨论】:

  • 您的阵列是否已满?您是否要增加数组的大小?
  • 那么它是一个字符串数组,还是一个字符串(一个字符数组)?虽然相似,但两种情况都有自己的缺陷。

标签: c arrays string


【解决方案1】:

如果是字符串,您只需使用 strcat() (some docs)。请注意,您只能扩展您允许的内存。你可能需要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';
    

    【讨论】:

    • 我不明白这怎么可能工作,该代码似乎在最后一个元素之前终止了数组/字符串?
    • 在您的编译器中尝试一下:在这种情况下,str[i++] = new_char; 等同于 str[i] = new_char; i++; 如果仍有疑问,请参阅 stackoverflow.com/q/4865599/191776
    【解决方案3】:

    如果你想扩展你的数组,你需要为它重新分配内存。查看realloc

    【讨论】:

      【解决方案4】:

      这取决于你所说的数组。

      如果你已经静态分配了一个固定长度的数组,那么你可以只复制第 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] 吗?谢谢
      • @James:您可以将元素从0 修改为24,否则您写入内存中的错误区域,这可能会导致数据丢失和/或程序崩溃。 foo[1] 是指向第二个数组元素,即第二个字符串的指针。
      • 你在哪里得到你的strdup?它看起来不像标准版本。
      • @bstpierre:你说得对,代码已更新。 @Yasir:感谢您的解释!
      • 你的数组声明语法错误(应该是char foo[25][25])。此外,您不能只将动态分配的字符串(指针)分配给数组。尝试编译您的示例...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-02
      • 2023-03-03
      • 1970-01-01
      • 2015-03-09
      • 1970-01-01
      • 2021-12-30
      • 2015-06-24
      相关资源
      最近更新 更多