社区
Linux/Unix社区
帖子详情
一个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数组的长度?
...全文
432
19
打赏
收藏
一个strlen的问题?
#include int main() { char str[ 2 ]; str[ 0 ] = '1'; str[ 1 ] = '2'; printf( "%d", strlen( str ) ); return 0; } 为什么str数组中没有'\0' strlen( str )仍可以计算str数组的长度?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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吧?
C/C++程序设计员应聘常见面试试题深入剖析
C/C++程序设计员应聘常见面试试题深入剖析 ...读者看了不同分值的 strcpy 版本,应该也可以写出
一个
10 分的
strlen
函数了,完美的版本为: int
strlen
( const char *str ){ assert( str != NULL ); ...}
php mb
strlen
支持,函数不支持mb_
strlen
怎么办?
函数不支持mb_
strlen
怎么办?回复讨论(解决方案)window先到PHP扩展目录查看有没有php_mbstring.dll文件 如果有 需要到PHP.ini中打开扩展把;extension=php_mbstring.dll改成extension=php_mbstring.dll那就开启mb扩展...
自己动手写
一个
strlen
()函数
strlen
所作的是
一个
计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第
一个
字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。...
C语言中sizeof与
strlen
区别
C语言中sizeof 与
strlen
...而
strlen
是
一个
函数,是由 C 语言 的标准库提供的。
strlen
计算的 是字符串的长度。 二.使用区别 1.sizeof sizeof 的操作数可以是数据类型、函数、变量,表达式使用方式为: (1)数据类型
C语言
strlen
返回值
问题
size_t 是
一个
无符号整型数据,在进行大小比较的时候可能会出错 以下例子中 if (-1 <
strlen
(myStr)) { printf(" -1 <
strlen
(myStr)\n"); } else { printf("-1 >
strlen
(myStr)\n"); } 这里的输出结果...
Linux/Unix社区
23,217
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章