字符串数组的sizeof、strlen、printf说明
printf打印是\0作为结束符,没有\0结果是随机值
sizeof计算字符数组中的字符个数,
1.有数组大小的话,则就是数组大小
2.没有数组大小,数组字符个数(包括字符中出现的\0)+\0(这个是编译器添加的\0)的总和
strlen计算字符个数,
1.结果是所有字符个数相加,\0作为结束符,不包括\0
2.字符数组中,如果没有\0,结果是随机值
char c1[10];//默认随机字符
printf("%s\n", c1);//乱码
printf("%d\n", sizeof(c1));//10 数组大小为10
printf("%d\n", strlen(c1));//23
char c2[] = "dsjfslkdj";
printf("%s\n", c2);
printf("%d\n", sizeof(c2));//10 字符个数9 + 结尾\0
printf("%d\n", strlen(c2));//9
char c3[] = { 'a', 'b', 'c' };//没有\0
printf("%s\n", c3);//由于结尾没有\0 打印出abc后出现乱码
printf("%d\n", sizeof(c3));//3 字符数组中有三个字符
printf("%d\n", strlen(c3));//21
char c4[20] = { 'q', 'w', 'e' };
printf("%s\n", c4);
printf("%d\n", sizeof(c4));//20
printf("%d\n", strlen(c4));//3
char c5[10] = { 'a', 'b', '2', 'c', 'i', 'o', 'a', 'b', '8', 'c' };//最后没有\0
printf("%s\n", c5);//打印所有字符后,出现乱码
printf("%d\n", sizeof(c5));//10
printf("%d\n", strlen(c5));//23
char c6[8] = "jkl1234";//不能越界,并且最多存7个字符 最后一位是\0
printf("%s\n", c6);
printf("%d\n", sizeof(c6));//8
printf("%d\n", strlen(c6));//7
char c7[] = { "dsjfslkdj" };//和不加大括号一样
printf("%s\n", c7);
printf("%d\n", sizeof(c7));//10 字符个数9 + \0
printf("%d\n", strlen(c7));//9
//字符数组中有元素为\0的特殊情况
char dog[] = "wangwang\0miao";//13(所有字符包括中间的\0) + \0
printf("%d %d\n", sizeof(dog), strlen(dog));//14 8
//字符常量的情况
char* str = "abc";//字符常量
printf("%d\n", sizeof(str));//字符个数 + \0 4
printf("%d\n", sizeof("Chain"));//和上边情况类似 5 + \0 6
printf("%d\n", strlen(str));//3 最后编译器会在后边加上\0