我应该知道这一点,但我不知道,我认为这可能是我基础知识方面的一个主要差距,所以我想我应该问专家.
鉴于:
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)
为什么当宣布为s1是strlen9,但申报时为s2是为6?额外的3来自哪里,它缺少一个空终止字符?
而且我明白sizeof(s2)比sizeof(s2)s2 大1个字节会自动添加空字符?
请温柔,TIA!
char s2[] = "MyWord"; 由于""声明,Auto添加了null终止符.
s1声明没有.当你做了strlen就s1和它出来到9这是因为它最终撞上了\ 0和停止.s1不应该与strlen一起使用,因为它不是null终止的.str1 on s1可能是1000.如果打开内存冲突检测,则s1的strlen会崩溃.