为什么 sizeof( "string" ) 打印的长度比 "string" 的长度多一个?

Why does sizeof("string") prints one more than the length of "string"?

本文关键字:string 一个 打印 为什么 sizeof      更新时间:2023-10-16
# include <stdio.h>
int main()
{
        int a = sizeof("string");
        printf("%d", a );
        return 0;
}

上面的代码打印 7 作为输出,而字符串的长度仅为 6。有人可以解释一下吗?

这是正在发生的事情:

  • 字符串文字"string"是一个 (const( 字符数组,包括一个 null 终止符字符,即 {'s', 't', 'r', 'i', 'n', 'g', ''} .在您的示例中,所述数组有 7 个元素。
  • 运算符sizeof应用于数组时会产生其大小(以字节为单位(。
  • 数组的大小是其每个元素的大小之和。
  • char的大小为 1。

因此,您可以获得文本中显式的字符数,以及一个 null 终止符。

此行为在 C 和 C++ 中是相同的

c中的所有字符串,甚至你像"string"一样写的字符串都以空字节''结尾。

C 或 C++ 代码中的表达式"string"被视为字符串文字,这意味着一个看起来像这样的字符数组:{'s','t','r','i','n','g',''} .在 c 和 c++ 中,所有字符串都必须由内存中的空字节终止,否则函数无法识别其结尾。

顺便说一下,这也是为什么在计算 c 代码中字符数组的长度时必须添加 1 个字符以考虑空字节的原因。因此,如果要将"string"存储在声明的字符数组中,则必须执行char array[7];在此处使用 6 会导致未定义的行为。

字符串的长度为 6,当我们在 " 中指定字符串时,默认情况下也会添加空字符。所以它打印了 7。

字符串

以 null 结尾并存储为包含字符的数组,并以空字符('',在 ASCII 中称为 NUL(结尾。所以你有:

s | t | r | i | n | g |  | 
                         ^-- 7th char

因为"string"隐式地添加了''字符。

相关文章: