【问题标题】:What's the best way to reset a char[] in C?在 C 中重置 char[] 的最佳方法是什么?
【发布时间】:2010-12-16 16:39:55
【问题描述】:

我用的是字符串:

char    word[100];

我从 0 开始为每个位置添加一些字符。 但是我需要能够清除所有这些位置,以便我可以从 0 开始添加新字符。

如果我不这样做,那么如果第二个字符串被缩短,那么第一个字符串在添加第二个字符串时最终会从第一个字符串中获得额外的字符,因为我不会覆盖它们。

【问题讨论】:

  • 如下所示,发帖人希望将整个数组归零,因为他/她不想使用像 strcat 这样的标准库字符串函数。他/她希望能够在现有的任何内容之上写入新字符,并指望在他/她停止写入后在下一个位置有一个 \0。

标签: c string overwrite


【解决方案1】:

如果您使用 C 风格的以零结尾的字符串,则无需清除它们。您只需要将字符串中最后一个字符之后的元素设置为NUL('\0')即可。

例如,

字符缓冲区[30] = { 'H', 'i', '', 'T', 'h', 'e', 'r', 'e', 0 }; // 或者,类似地: // char buffer[30] = "你好"; // 任何一个例子都可以在这里工作。 printf("%s", 缓冲区); 缓冲区[2] = '\0'; printf("%s", 缓冲区)

会输出

你好

尽管buffer[3] == 'T' 仍然是真的。

【讨论】:

  • 我不在乎它会输出什么,我需要将所有这些位置都休息到''。我该怎么做?
  • 您确定需要吗?因为我的意思是,在使用 C 编程时,通常不需要这样做。
【解决方案2】:

如果你想将整个数组归零,你可以:

memset(word, 0, sizeof(word));

【讨论】:

  • @goe 您能否向我们展示整个代码 - 或者您尝试此操作后实际输出的内容?
  • 只是想提醒读者sizeof(word) 只有在word 是一个数组时才能按预期工作。如果word 是一个指针,那么就需要一些其他方法来跟踪数组大小。
【解决方案3】:

您可以将空终止符分配给char 数组的第一个位置。

*word = '\0';

【讨论】:

  • 这行不通。重新填充数组时,\0 被覆盖,之前存在的垃圾仍然存在。
  • 我误解了这个问题。在 OP 中,没有使用 C 字符串处理函数并不明显。
【解决方案4】:

strcpy(word,"") 也可用于此目的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多