关于sizeof 和 strlen 的问题? 谢谢!

DaneWoo 2002-08-29 02:41:20
#include <iostream.h>
#include <string.h>

void main()
{
char* s1="helloworld";
int nLens1=sizeof s1;
int nLens12=strlen(s1);
cout<<nLens1<<","<<nLens12<<endl;
}
为何在VC6.0中的输出结果是 4,10?究竟 sizeof() 和 strlen()有何不同?
...全文
24 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
step_by_step 2002-08-30
  • 打赏
  • 举报
回复
to stidio_zhougang(回头是岸)
系统会给字符串常量自己加上去的。不明白的话看我改写的那个程序。
sdx_none 2002-08-29
  • 打赏
  • 举报
回复
机器字长为32位。

1。因为数据类型的长度=SIZEOF(******),sizeof(s1)就是char型指针的长度,就是4
2。字符串的长度=strlen(******),所以strlen(s1)是字符串的长度,当然是10了。
stidio_zhougang 2002-08-29
  • 打赏
  • 举报
回复
TO:step_by_step(脚印)
不要忘了s1后面还有一个'\0',而用strlen()则不把这个算在内。
flyaramy 2002-08-29
  • 打赏
  • 举报
回复
没啥说的了!同意上边的兄弟
step_by_step 2002-08-29
  • 打赏
  • 举报
回复
看下面这段程序你会理解的更透彻

#include <iostream.h>
#include <string.h>

void main()
{
char s1[]="helloworld";//注意这一句和上一个程序的差别!!
int nLens1=sizeof s1;
int nLens12=strlen(s1);
cout<<nLens1<<","<<nLens12<<endl;
}
结果就不一样了,是
11,10
blh 2002-08-29
  • 打赏
  • 举报
回复
sizeof 适用于计算变量的存储空间,它的值在编译期间已经计算,sizeof(p) p为指针,在32位系统中指针长4字节,所以为4
不能时使用sizeof计算字符串的长度

但可以使用sizeof计算数组的长度度如
int s3[]={1, 2, 3, 4, 5, 6, 7};
int nLens13=sizeof(s3) / sizeof(int);
nLens13 = 7
Kklee 2002-08-29
  • 打赏
  • 举报
回复
情况就是楼上几位兄弟说的这样
blue_coco 2002-08-29
  • 打赏
  • 举报
回复
sizeof 是求一个数据类型的大小。

eg: sizeof (int), sizeof (char), sizeof (struct).....

strlen 是求字符串的长度。

sizeof s1 相当于求指针的大小,当然是4
strlen 是长度。
darkelf 2002-08-29
  • 打赏
  • 举报
回复
呵呵,不管是VC,任何一个编译器输出都是这样的,机器字长为32位的
因为sizeof(s1)就是指针的长度,就只有4
而strlen(s1)是字符串的长度,当然是10了。

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧