visual c ++中的sizeof("...")让我不高兴

7 c++ sizeof visual-c++

我正在写一段代码,我sizeof("somestring")用作函数的参数,然后我注意到函数没有返回预期的值,所以我去看相应的asm代码,我发现了一个令人不快的惊喜.有没有人对此有解释(见图)?

监视窗口显示sizeof == 4,asm 5

我知道有1000多种不同的方法,我已经实现了另外一种,但我确实想知道这种行为背后的原因.

对于好奇,这是Visual Studio 2008 SP1.

Mar*_*ins 11

值5是正确的.常量包括零终止符字节.观察窗口中4的显示是看起来不正确的.


Mat*_*lia 7

字符串文字的类型为"数组n const char"([lex.string],8),其中n char是组成字符串的s 的数量.由于字符串以空值终止,sizeof将返回"正常"字符数加1; 观察窗口是错误的,这可能是一个错误(正如@Gene Bushuyev所说,它可能将其解释为指针而不是文字=数组).

值5嵌入到代码中的事实是正常的,是sizeof编译时运算符.


sle*_*led 6

在每个C-String的末尾都有一个C-String终结符'\ 0',因此"pdfa"实际上是以下的char数组,{'p', 'd', 'f', 'a', '\0'}但不会打印\ 0.请strlen("pdfa")改用.


vz0*_*vz0 6

请记住,C字符串包含结尾零\0.五是正确的价值.