C语言sizeof和strlen

字符串数组的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

猜你喜欢

转载自blog.csdn.net/weixin_43340991/article/details/86520357