标题:关于strlen的问题
只看楼主
lgp311
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2004-8-29
得分:0 

#include <string.h> main() {char *p="abcde\0fghjik\0"; printf("%d\n",sizeof(p)); }

输出是2

#include <string.h> main() {char p[]="abcde\0fghjik\0"; printf("d\n",sizeof(p)); }

输出是14

为何?

2004-09-15 23:07
lyn_gemini
Rank: 1
等 级:新手上路
帖 子:103
专家分:3
注 册:2004-9-15
得分:0 
以下是引用lgp311在2004-09-15 23:07:39的发言:

#include <string.h> main() {char *p="abcde\0fghjik\0"; printf("%d\n",sizeof(p)); }

输出是2

#include <string.h> main() {char p[]="abcde\0fghjik\0"; printf("d\n",sizeof(p)); }

输出是14

为何?

第一个是2,那是因为你的sizeof(p)指的是该指针所占的内存大小,对于我的机子是4个字节,因此输出是4,但你的机子是2,不同的机子不同。

第二个是14,因为它计算的是该数组所占的空间,虽然该字符串有'\0',但因为你是用双引号引起来的,所以系统又自动在最后加了个'\0',所以共是14。


欢迎访问我的博客--*IT一粟*-- : http://lyn_gemini.
2004-09-15 23:49
gosonwey
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-11-3
得分:0 
以下是引用流星雨在2004-9-14 22:57:03的发言:
有以下程序
#include <string.h>
main()
{char *p="abcde\0fghjik\0";
printf("%d\n",strlen(p));
}

请问输出是多少?答案是12,为什么?strlen应该是统计字符串个数,不包含'\0',那我也数不出12呀,abcdefghjik只有11个啊!(我晕了)

我知道vc6编译器会把字符串"\0xx"(x为小与8的数字)转变为八进制数xx对应的ascii字符,但是也得不出12来啊,lz用的是什么编译器如此神奇......

2005-11-03 23:38



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-5315-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.369917 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved