一个简单的sizeof和strlen的问题

来源:百度知道 编辑:UC知道 时间:2024/06/22 21:45:26
char a[10]= "abcdefg",b[ ]="abcdefg";
a[3]=’\0’;
b[3]=0;
printf("%d,%d",sizeof(a),strlen(a));
printf("%d,%d",sizeof(b),strlen(b));

请问最后结果是什么?我是菜鸟,才接触c,望指点……
为什么是这个答案~~~??????
先谢谢了~~

10,3
8,3

对于指针,sizeof操作符返回这个指针占的空间,一般是4个字节;而对于一个数组,sizeof返回这个数组所有元素占的总空间。
b是一个字符型数组。C/C++规定,对于一个数组,返回这个数组占的总空间,所以sizeof(b)取得的是字符串"absdefg"占的总空间。"absdefg\0"中,共有absdefg\0共8个字符,所以b数组的长度是8,所以sizeof(8)=8*sizeof(char)=8。而a已经定义成了长度是10的数组,所以sizeof(a)为10。

而strlen不区分是数组还是指针,就读到\0为止返回长度。而且strlen是不把\0计入字符串的长度的。