char x[]="string"; x[0]=0;x[1]='\0';x[2]='0'; printf("%d%d\n",sizeof(x),strlen(x

大神们,打扰一下,char x[]="string"; x[0]=0;x[1]='\0';x[2]='0'; printf("%d%d\n",sizeof(x),strlen(x));输出为什么是70
最新回答
一澜冬雪

2024-09-18 07:52:51

sizeof(x), 是计算x占多少内存。char x[]="string" 有6个字符外加一个看不见的字符串结束符,共7个。
x[0]=0; ASCII 码 0 就是null, 就是字符串结束符。strlen(x) 返回字符串长度,长度是不计入字符串结束符的,所以得0。
printf("%d%d --- 是70。 sizeof(x) 返回7,strlen(x) 返回0
随风飞走

2024-09-18 01:39:10

sizeof(x)得到x定义时的字节大小,"string"有6个字节,再加上一个结束符'\0',等于7.

strlen(x)得到字符串x的长度,由于第一个数据x[0]=0,已经是字符串结束符,表示字符串长度是0.

所以打印出来就是70
夏了夏天

2024-09-18 07:26:06

sizeof和strlen是有区别的,最好记的方法,sizeof就是当前元素所占内存数,而strlen,所见即所得,就是你看见有几位就是几,这下懂了吧,char x[]初始化为string了,而字符串会自动在结尾加上\0代表结束,所以string6为加\0的1位就是7,而'\0'就是0啊,所以x[0] = 0就已经结束了,如果0不是以字符形式存在或者以int类型存储,代表的就是结束,所以strlen为0
追问
如果0是以字符形式存在或者以int类型存储,代表的就是结束吧?
追答
0以Ascii形式存储代表的是结束,int类型的0的Ascii是48哦。。。