我遇到了一个问题。在下面的代码中,我预计字符串p的长度是3,但实际长度是6。这是我第一个疑惑的地方。然后,我自己调试的时候,调试出来的p的长度符合预期的结果。这让我感到非常不解。不知道为什么p的长度是6,调试的时候为什么长度变成了3。. 有人可以回答这个问题吗?
#include <cstring>
#include <cstdio>
int main()
{
char p[]={'a','b','c'}, q[10] = {'a','b','c'};
printf("%p %p\n",&q,&p);
printf("%d %d\n",strlen(q),strlen(p));
return 0;
}
问题是,p
不是以空字符结尾的字符数组,因此不能用作string。使用它作为期望字符串的函数调用的参数,将导致未定义的行为 (UB)。
包含 UB 的程序的输出不能以任何方式证明是合理的。
要添加更多上下文,q
以空值终止,根据参数小于聚合大小的初始化列表规则,其余成员将被初始化,就好像它们具有静态存储一样,因此在char
类型的情况下,它们被初始化为0
(这是字符串所需的空终止符)。因此,q
用作字符串很好。
解决方案:
你可以
{'a','b','c', '\0'}
"abc"
,它将在数组中包含空终止符。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句