权当笔记。
看官能看懂最好,看不懂的话可以拿源码去运行下。
#include<stdio.h>
#include<string.h>
/*
"he"看着只有两个字符,但是只用2个字节是没法存下去的。
如果是ch3[2]="he",这样会报错。因为没有给\0留地方
得用ch3[3]="he";
ch2[]={'h','e'};这种定义方法相当于就是放了一个'h'和一个'e'在ch2后面没有主动放\0,所以空间占用两个字节
但是strlen()是读到\0才终止的,然后计算\0之前的字符个数,所以strlen(ch2)的结果是没法预测的。
ch1[]="he",这种定义方式会申请3个空间,第一个放'h',第二个放'e',第三个放'\0';
*/
int main()
{
char ch1[]="he";//占用3个字节 字符长度为2
char ch2[]={'h','e'};//占用2个字节 字符长度不确定(看什么时候读到\0)
char ch3[3]="he";//占用3个长度,字符长度为2
printf("%d ",sizeof(ch1));//3
printf("%d ",sizeof(ch2));//2
printf("%d \n",sizeof(ch3));//3
printf("%d ",strlen(ch1));//2
printf("%d ",strlen(ch2));//不确定
printf("%d \n",strlen(ch3));//2
return 0;
}