C语言问题

main()
{ char a[]={'\1','\2','\3','\4','\0'};
printf("%d %d\n",sizeof(),strlen());
}
以上程序的输出结果是为什么是5,4

#include <stdio.h> -----函数要用到sizeof
#include <string.h> ----函数要用到strlen
main()
{
char a[]={'a','b','c','d','e','f','g','h','\0'}; int i,j;
i=sizeof(a);j=strlen(a);
printf("%d,%d\n",i,j);
}

这个列题输出的是 9,8.
因为
----sizeof(a)表示字符组a里元素所占用的字节大小a里有9个元素每个元素占1个字节所以 第一个答案是9。
----strlen(a)表示字符组a里的长度也就是有多少个元素strlen遇到'\0'才会退出。。也就是不算上‘\0'所以结果是8,。。
strlen这个函数是为了方便计算字符串的长度。。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-09-15
sizeof() 返回字符串的长度,不包括'\0';

strlen() 返回变量所占内存在大小,包括'\0'在内;
第2个回答  2008-09-15
对于指针,sizeof操作符返回这个指针占的空间,一般是4个字节;而对于一个数组,sizeof返回这个数组所有元素占的总空间。
a是一个字符型数组。C/C++规定,对于一个数组,返回这个数组占的总空间,所以sizeof(a)取得的是字符串占的总空间。字符串中,共有5个字符,所以a数组的长度是5,所以sizeof(5)=5*sizeof(char)=5。
而strlen不区分是数组还是指针,就读到\0为止返回长度。而且strlen是不把\0计入字符串的长度的。
第3个回答  2008-09-15
c的字符串都是以\0结尾的,这个\0也占了一个字节,
所以,
第一个sizeof(a)是输出数组的大小,当然是5个字节了;
而第二个strlen是不计算\0的,所以是4个字母。
第4个回答  2008-09-15
sizeof() 返回字符串的长度,不包括'\0';

strlen() 返回变量所占内存在大小,包括'\0'在内的;