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

我知道有1000多种不同的方法,我已经实现了另外一种,但我确实想知道这种行为背后的原因.
对于好奇,这是Visual Studio 2008 SP1.
字符串文字的类型为"数组n const char"([lex.string],8),其中n char是组成字符串的s 的数量.由于字符串以空值终止,sizeof将返回"正常"字符数加1; 观察窗口是错误的,这可能是一个错误(正如@Gene Bushuyev所说,它可能将其解释为指针而不是文字=数组).
值5嵌入到代码中的事实是正常的,是sizeof编译时运算符.
在每个C-String的末尾都有一个C-String终结符'\ 0',因此"pdfa"实际上是以下的char数组,{'p', 'd', 'f', 'a', '\0'}但不会打印\ 0.请strlen("pdfa")改用.