Dig*_*oss 16

最后有一个尾随'\0'.


Ben*_*igt 5

它与此无关#define.字符数组的大小相同:

const char str[] = { "test1" };
sizeof (str) == 6
Run Code Online (Sandbox Code Playgroud)

这个字符串长6个字节的原因是C中的字符串有一个终止NUL字符来标记结尾.

  • 那不是数组,它是指向字符串文字的指针,`sizeof(str)`将返回机器指针类型的大小. (2认同)

mik*_*ked 5

a #define只是在编译之前进行文本替换.

#define STR "test1"
sizeof(STR);
Run Code Online (Sandbox Code Playgroud)

实际上是由编译器看到的

sizeof("test1");
Run Code Online (Sandbox Code Playgroud)

现在为什么是6而不是5?因为字符串末尾有一个空终止符.