C语言的字符串细节
char str1[5] = { "abcd" };
//sizeof(str2) = 5
//strlen(str2) = 4
//当我们定义了一个大小为5的字符串数组,最多只能放4个字符,即换成"abcde"会报错
//是因为至少要留一个'\0'(ASCII码 = 0)即str1[4] = '\0'作为结尾结束标志,如果初始化"abc"则会未初始化的都是str1[3-4] = '\0'
char str2[5] = { 'a','b','c','d','e'};//强行覆盖了结束标志
//sizeof(str2) = 5
//strlen(str2) = 脏数据。因为识别到'\0'才会停下来
char str3[] = { "abcde" };//总会在最后补'\0'
//sizeof(str2) = 6
//strlen(str2) = 5
char str4[] = { 'a','b','c','d','e'};
//sizeof(str2) = 5
//strlen(str2) = 脏数据。因为没有明确定义'\0'
char str5[] = {"张三"};
//sizeof(str2) = 5 因为一个汉字在中文GBK国标库占两个字符然后自动补'\0 '
//strlen(str2) = 4
char str6[] = {"abc\ndef"};
cout << str6 << endl;
//输出:
abc
def
//sizeof(str6) = 8 '\n'仅代表一个字符,末尾补'\0'
//strlen(str6) = 7
char str7[] = { 'a','\n','b'};
cout << str7 << endl;
//输出: 也就是说cout输出流也是看到'\0'结束输出的
a
b烫烫烫乱码
//sizeof(str7) = 3 明确指定字符就是明确大小
//strlen(str7) = 脏数据。