社区
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数组的长度?
...全文
430
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写文章
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语言基础》 之 第9章 字符串
课程内容:字符数组1、字符串越位的
问题
、指针变量的空间大小、字符串常量、字符串传参、printf格式化输出字符串、字符串的非格式化输出函数、字符串输入函数、
strlen
函数、strcpy函数和strncpy函数、strcmp函数和...
自己动手写
一个
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"); } 这里的输出结果...
(C语言)两种方法模拟
一个
strlen
函数
模拟实现
一个
strlen
函数 - 递归思想附详细图解
Linux/Unix社区
23,121
社区成员
74,508
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章