【发布时间】:2020-07-25 22:46:20
【问题描述】:
我遇到了一个问题。在下面的代码中,我预计字符串 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不是以空值结尾的;strlen一直计数直到它看到一个空值(或者你的程序被中止,因为你访问了不属于你的内存)。 -
您在
p上使用strlen,而p不履行使用strlen的约定,从而导致未定义的行为。对于未定义的行为,任何事情都可能发生。该程序可能会产生荒谬的结果。它可能看起来工作正常。它可能会崩溃。或任何其他无法解释的行为。 -
注意
q被初始化了,初始化器中没有提供的任何数组元素都设置为null。
标签: c++ c arrays string initialization