【问题标题】:Difference between '0', 0 and '\0' in a C string [closed]C字符串中'0',0和'\ 0'之间的区别[关闭]
【发布时间】:2018-05-04 17:20:29
【问题描述】:

我在 C 中得到了这段代码,但我不明白为什么输出是:

输出:“地狱”

我希望它是“Hell00000000”而不是“Hell”。 谁能解释一下为什么只有“地狱”?

char str[666];
char * x = str + 4;
strcpy ( str, "Hello world!" );

while ( *x )
 {
   *x ++ = 0;
 }
printf ( "%s", str );

【问题讨论】:

  • 0'0' 是 2 个不同的字符。
  • 我投票决定将此问题作为离题结束,因为它可以通过阅读任何书籍或教程中的基本字符串章节来排序。
  • @PeterJ_01 我不同意。提问者对'0'0'\0' 之间的区别感到困惑。仅仅因为它是一个相当基本的问题,并不意味着它不适合 Stack Overflow。不过,它可能与其他问题重复。
  • 所以标题应该是:0和'0'有什么区别。这类问题的数量呈指数级增长。

标签: c arrays pointers char printf


【解决方案1】:

\00相同的。两者都是字符数组的nul 终止字符。

0'0'不同的。第一个的 ascii 代码为 0,第二个的 ascii 代码为 48

在这里,您无意中放置了 nul 终止字符。这就是你得到Hell的原因。

如果你想得到结果Hell00000000

char str[666];
char * x = str + 4;
strcpy ( str, "Hello world!" );

while ( *x )
 {
   *x  = '0'; //<------This is different.
   x++;
 }
printf ( "%s", str );

【讨论】:

    【解决方案2】:

    字符串中的值0 不是有效字符(或者,更准确地说,它是通常表示“无字符”的NUL 字符)并用作字符串的结束标记C.

    您将它与'0'可打印字符)混淆了,如果您使用的是基于 ASCII 的编码,例如48

    【讨论】:

    • 这是问题的经典示例,应该关闭,因为答案在任何 C 教程或书籍中。
    • @PeterJ_01 这不是一个紧密的原因。这里一个有效的关闭原因可能是一个简单的错字,但似乎确实有些混乱。我们不会按照您的想法对问题进行评分。也就是说,一个“愚蠢”的问题可能仍然值得投反对票。
    • 应该是这样的问题,表明缺乏努力和对书籍过敏。它将 SO 从程序员论坛转换为惰性 OP 的教学门户
    • @PeterJ_01 没有客观的方法来衡量你在说什么,我想这就是我们没有标准的“密切原因”的原因,比如“询问基本语言知识”。在 SO 的更具历史意义的部分你会发现很多这样的问题。
    【解决方案3】:

    你把它们改成0,也就是nul字符,等于'\0'。如果要将 0 添加为 char,则必须使用 '0'

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 2023-03-15
      • 2012-10-23
      • 1970-01-01
      • 2016-01-08
      • 2014-10-09
      • 2011-11-04
      相关资源
      最近更新 更多