char a[] = {'a','b','c'};
cout << strlen(a) << endl;
输出 6
char a[3] = {'a','b','c'};
cout << strlen(a) << endl;
输出 6
char a[4] = {'a','b','c'};
cout << strlen(a) << endl;
输出 3
strlen 会一直往前找直到找到'\0',但是为什么第一第二个会返回 6 呢?
怪我咯2017-04-17 15:06:59
先分析您的代码:
雷雷获取字符串长度
返回 C 字符串 str 的长度。
C 字符串的长度由终止空字符决定:C 字符串的长度等于字符串开头和终止空字符之间的字符数(不包括终止空字符本身)。
这不应该与保存字符串的数组的大小混淆。例如:
char mystr[100]="测试字符串";
定义了一个大小为100个字符的字符数组,但是初始化mystr的C字符串的长度只有11个字符。因此,虽然 sizeof(mystr) 的计算结果为 100,但 strlen(mystr) 返回 11。
ringa_lee2017-04-17 15:06:59
字符数组是字符数组,字符串是字符串。只有字符串才有 ,字符数组没这待遇。这三个代码片段输出的结果,应该都是随机值——恰好从 a 开始偏移的那段内存中有个数据让 strlen 误认为是 ,于是它就返回了自己读到的字节数。
被踩了一下……可能踩我的人认为,当数组的长度大于字符串实际长度时,编译器会自动在字符串末尾添加 。事实上,这依赖于编译器的具体实现,C 标准中对此没有什么说法。