关于strlen这个函数的问题

zyhserry 2010-06-16 04:40:09
char array[30];
printf("strlen(array) = %d\n", strlen(array));

就这两句代码,打印出来的长度是64,我定义的是30啊,不解!
于是我重新定义char array[64];
结果打印出来是96
我重新定义成char array[32];
结果打印出来是64
什么原因啊????

我身上没分,只能散那么多了+_||

...全文
87 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyhserry 2010-06-16
  • 打赏
  • 举报
回复
哦,好像是的
char array[30] = "";
printf("strlen(array) = %d\n", strlen(array));
我这么做以后,打印出来就是0了。。。
ok2210495 2010-06-16
  • 打赏
  • 举报
回复
strlen()函数的原理就是找第一个'\0'在哪里的,可能你的程序开辟char array[30]后没有多管闲事给array[30]中的某个赋值为'\0',执行strlen(array)了程序只是很死板地从array[0]开始往下找第一个'\0',找到array[29]了还没找到,不会停继续往下……

你可以用debug看看刚开辟char array[30]时那里面都是什么值吧
huanmie_09 2010-06-16
  • 打赏
  • 举报
回复
char array[30];
要区分
sizeof(array)和strlen(array)的区别.
strlen是计算从array首地址开始,直到遇到字符串结束符'\0'为止,并且不包括'\0'的字符个数
zhangweiit 2010-06-16
  • 打赏
  • 举报
回复
楼主,你这个得到的64,32,其实是一个不确定的值
char array[30];
这个数组还没经过初始化,就直接用strlen求字符长度,是不对的
你用sizeof可以确定,因为sizeof会根据数组定义的类型与大小来得出占用空间

但是strlen只会从数组的头的内存地址开始,直到找到'\0'的字符,或是0才结束

这就是strlen与sizeof的一个重要区别
zyhserry 2010-06-16
  • 打赏
  • 举报
回复
char array[30];
printf("strlen(array) = %d\n", strlen(array));

main里就这两行代码,其它的没有
ok2210495 2010-06-16
  • 打赏
  • 举报
回复
你在array中给它加上字符串结束符'\0'没?
zyhserry 2010-06-16
  • 打赏
  • 举报
回复
也就是说,如果数组大小不是2的整次幂,则先变成2的整次幂,再加上32,why?

69,371

社区成员

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

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