本帖最后由 godlike 于 2014-5-14 14:07 编辑
今天百度看到一道c语言的面试题,sizeof与strlen的区别;自己试了一下,发现了什么好像,请多多指教啊。
大家都知道,sizeof:计算某个变量或者某种数据类型在内存中所占的字节; strlen 计算字符串的长度
对于同一个字符串:sizeof会把'\0'也算进去,strlen则是除去'\0'的字符串长度;
- int main()
- {
- char name[] = "abc哈";
- printf("sizeof(name)=%lu\n", sizeof(name));//结果为7,说明了一个汉字占3个字节
- printf("strlen(name)=%lu\n", strlen(name));//除去'\0',结果自然是6
- }
复制代码
请看另外的情况:这样定义字符串:char *name = "哈";
- int main()
- {
- char *name = "哈";
- printf("sizeof(name1)=%lu\n", sizeof(name1));//结果为8,并且无论name1怎么变,这个值都不会变
- printf("strlen(name1)=%lu\n", strlen(name1));//结果正常
- }
复制代码
这是不是也算区别,用指针的形式定义字符串,sizeof()的值固定是8,也就是指针的大小,这么理解我忍了,但是数组名也是地址啊,为什么就不是输出它的地址的所占的字节数;
还没完:sizeof可以这样输出: sizeof(*name),且结果又不变,一直是1
- int main()
- {
- char *name1 = "哈哈哈";
- printf("sizeof(name)=%lu\n", sizeof(*name1));//结果是1了
- printf("strlen(name)=%lu\n", strlen(name1));//结果正常:9
- }
复制代码
好吧,这下我彻底晕了:dizzy: |