一个strlen的问题?

blossom007cn 2005-10-20 10:33:39

#include <stdio.h>

int main()
{
char str[ 2 ];

str[ 0 ] = '1';
str[ 1 ] = '2';

printf( "%d", strlen( str ) );
return 0;
}


为什么str数组中没有'\0' strlen( str )仍可以计算str数组的长度?
...全文
430 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjf7888 2005-11-03
  • 打赏
  • 举报
回复
热闹,UP一下
Last_Dodo 2005-11-03
  • 打赏
  • 举报
回复
只有全局变量是置零的,堆和栈里变量都不一定是零。另外sizeof给出的是变量内存大小,对字符数组来说不一定是字符串的长度。比如:
char str[2];
str[0] = 'a';
str[1] = 0;

这时sizeof(str)是2,strlen(str)是1。

yuanfangol() :没有‘\0’,strlen无法知道字符串到什么地方结束。
LDD123 2005-11-02
  • 打赏
  • 举报
回复
没有人工初始化的栈空间是杂乱的,不能说缺省就是0。
LDD123 2005-11-02
  • 打赏
  • 举报
回复
#include <stdio.h>
int main()
{
char str[ 2 ];
str[ 0 ] = '1';
str[ 1 ] = '2';
printf( "%d\n", strlen( str ) );//11
printf("sizeof %d\n",sizeof(str));//sizeof 2
return 0;
}
alaiyeshi 2005-11-02
  • 打赏
  • 举报
回复
运气好而已,不一定什么时候就出错了
chaolajiao 2005-10-28
  • 打赏
  • 举报
回复
回复人: nicelcp(广州大学城) ( ) 信誉:100 2005-10-20 11:09:47 得分: 0

站里的字符数组空间缺省为0
如果是堆里的空间就不一定了,最好分配之后立即置空
--------------
不是吧???

C/C++ 为了提高效率, 不自动 初始化堆栈里的数组元素值为0的.

这一点和堆一样.
tb01412 2005-10-26
  • 打赏
  • 举报
回复
对于数组而非指针来说,可以用sizeof
yuanfangol 2005-10-26
  • 打赏
  • 举报
回复
为什么要用有'\0',没有用 strlen( str )不一样可以计算出长度吗?
zhengjiang 2005-10-25
  • 打赏
  • 举报
回复
哈,哈。这么简单的还在研究,不明白。学习。。
YanDong_8212 2005-10-25
  • 打赏
  • 举报
回复
恭喜你,你可以去买彩票
踏岸寻柳 2005-10-25
  • 打赏
  • 举报
回复
你可以多试几次看看,是否每次都是正常的^_^

这属于典型的数组越界。
tb01412 2005-10-21
  • 打赏
  • 举报
回复
稍微了解一下编译器你就明白这是为什么了
gaoxianfeng 2005-10-20
  • 打赏
  • 举报
回复
:)
栈数据一般是0
反复使用可能会非0
darkstar21cn 2005-10-20
  • 打赏
  • 举报
回复
不要把偶然当必然。
运气好正好str+3位置的内存是0而已。
nicelcp 2005-10-20
  • 打赏
  • 举报
回复
站里的字符数组空间缺省为0

如果是堆里的空间就不一定了,最好分配之后立即置空
x86 2005-10-20
  • 打赏
  • 举报
回复
之所以仍可以计算str数组的长度是因为str数组之后的数据恰好是0,不过非法的内存地址的数据是什么值都是有可能的,虽然是0的可能性比较大。

wjlsmail 2005-10-20
  • 打赏
  • 举报
回复
#include <stdio.h>

int main()
{
char str[2 + 1]; // 最后一位存放 '\0'

str[ 0 ] = '1';
str[ 1 ] = '2';

printf( "%d", strlen( str ) ); // 2
return 0;
}
steel007 2005-10-20
  • 打赏
  • 举报
回复
这只是你运气好,碰巧后面就是0了:)
rabbitweng 2005-10-20
  • 打赏
  • 举报
回复
如果是局部变量,应该内存中初始值为0吧?

23,121

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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