【问题标题】:The ASCII value of '\0' is same as ASCII value of 0?'\0' 的 ASCII 值是否与 0 的 ASCII 值相同?
【发布时间】:2012-07-02 13:37:24
【问题描述】:

我了解到 '\0' 的 ASCII 值是 0,而 0 的 ASCII 值是 0x30,但是当我尝试使用 printf 打印它们的 ASCII 值时,我得到了相同的输出:

printf("\'\\0\' : %d\n", '\0');
printf("\'\\0\' in hex : %x\n", '\0');
printf("0 : %d\n", 0);
printf("0 in hex: %x\n", 0);

输出:

'\0' : 0
'\0' in hex : 0
0 : 0
0 in hex: 0

为什么?

【问题讨论】:

  • 这是一个NULL 字节,与零相同。
  • @EvanMulawski,'\0' 实际上是 NULNULL 是一个指针。 (并不是说 C 语言有区别,但在概念上它们是不同的)
  • @Shahbaz:糟糕,错误地双击了“L”。你是对的。

标签: c


【解决方案1】:

ASCII 字符 '0' 与数字 0 不同。您在第二对 printfs 中打印整数 0,而不是 '0'

试试这个:

printf("'\\0' : %d\n", '\0');
printf("'\\0' in hex : %x\n", '\0');
printf("'0' : %d\n", '0');
printf("'0' in hex: %x\n", '0');

此外,您不需要在字符串中转义 '。即"'"就可以了,不用写"\'"

【讨论】:

    【解决方案2】:

    你混淆了 0、'\0' 和 '0'。

    前两个是同一个东西;它们只代表一个值为 0 的 int

    然而,'0' 则不同,它表示一个带有'0' 字符值的int,即48

    【讨论】:

      【解决方案3】:

      是的,字符字面量'\0' 具有值0,这与字符集无关。

      (K&R2, 2.3) "字符常量'\0'表示值为零的字符,即空字符。'\0'通常写成而不是0,以强调某些表达式的字符性质,但数值只是 0。”

      【讨论】:

        【解决方案4】:
        printf("0 : %d\n", '0');
        

        这样打印,你会得到48。

        【讨论】:

          【解决方案5】:

          所有这些答案似乎都没有抓住\0的重点......

          试试这个:

          printf("This line\0 might not completely appear");
          

          这就是\0的原因

          所以你可以定义一个以 NULL 结尾的字符串 ...

          #define TEST_STRING "Test"
          

          完全不同
          #define TEST_STRING "Test\0"
          

          后者在某些情况下很有用。

          【讨论】:

          • "Test" 是一个以 null 结尾的字符串。
          • 你是对的 - 必须在 ... #define NAME_DESC "Dog\0A 四足朋友" 是一个更好的例子,使用 '\0' 来“隐藏”描述来自标准函数并连接第二个字符串(描述)。我只是想证明它有用。
          【解决方案6】:

          '\0' 的 ASCII 值确实是 0。但 '\0' 与 '0' 不同(注意反斜杠,它是转义符号)。

          【讨论】:

            【解决方案7】:

            你的最后一行应该是

            printf("0 in hex: %x\n", '0');
            

            【讨论】:

              猜你喜欢
              • 2018-11-19
              • 2015-11-26
              • 2020-10-17
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-08
              相关资源
              最近更新 更多