void main() {
char str1[4] = { 'A','B','C','D' };
char str2[3] = { 'A','B','D' };
cout << strlen(str2)
}
结果是31,我不知道为什么会发生
答案 0 :(得分:0)
您需要在C型字符串上使用nul终止符。
#include <iostream>
#include <cstring>
int main() {
char str1[4+1] = { 'A','B','C','D', '\0' }; // same as = "ABCD"
char str2[3+1] = { 'A','B','D', '\0' }; // same as = "ABD"
std::cout << std::strlen(str2) << '\n';
}
答案 1 :(得分:0)
C字符串(如在chars数组中)通常是终止字符为'\ 0'的数组。 当您分配这样的字符串时:
return !!(expression);
等效于:
char* a = "hello";
这种字符串适用于strlen和类似的字符串(strcpy,strthis,strthat)。
在C ++中,您应该使用包含字符串的字符串类型。这是一个类,您可以使用该类的功能
char a[6] = {'h', 'e', 'l', 'l', 'o', '\0'};
对数组(实际上是第一个字符的地址)进行#include <string>
...
std::string a = "hello";
int size = a.size();
处理时,strlen函数会在内存中进行迭代,直到找到\ 0,即使它从数组中移出并进入其他数据在您的内存中。
您得到的31表示您的困惑在内存中的char大小持续了31倍,直到它最终遇到\ 0字节。