在C++中声明字符串时为什么会出现大小差异?

Jam*_* MV 1 c c++

我应该知道这一点,但我不知道,我认为这可能是我基础知识方面的一个主要差距,所以我想我应该问专家.

鉴于:

 char s1[] = { 'M', 'y', 'W', 'o', 'r', 'd' };
 char s2[] = "MyWord";

cout << strlen(s1)<<endl;
cout << strlen(s2)<<endl;

cout << sizeof(s1)<<endl;
cout << sizeof(s2)<<endl;
Run Code Online (Sandbox Code Playgroud)

为什么当宣布为s1strlen9,但申报时为s2是为6?额外的3来自哪里,它缺少一个空终止字符?

而且我明白sizeof(s2)sizeof(s2)s2 大1个字节会自动添加空字符?

请温柔,TIA!

And*_*ell 7

char s2[] = "MyWord"; 由于""声明,Auto添加了null终止符.

s1声明没有.当你做了strlens1和它出来到9这是因为它最终撞上了\ 0和停止.s1不应该与strlen一起使用,因为它不是null终止的.str1 on s1可能是1000.如果打开内存冲突检测,则s1的strlen会崩溃.


cni*_*tar 7

第一个缺少\0第二个中存在的隐式终止符.从而:

  • 1记忆方面,第一个小于第二个
  • 首先做strlen的是未定义的行为(因为它缺少终止符)