社区
C语言
帖子详情
问个小问题
djh512
2012-01-02 11:53:36
char p[]={'a','e','r'};
char q[15]={'a','e','r'};
printf("p=%d\nq=%d\n",strlen(p),strlen(q));
VS2008下输出的是15,3
问下15是怎么来的,
size_t strlen_a(const char * str) {
size_t length = 0 ;
while (*str++ )
++ length;
return length;
}
第一个为什么不是6呢?
...全文
127
16
打赏
收藏
问个小问题
char p[]={'a','e','r'}; char q[15]={'a','e','r'}; printf("p=%d\nq=%d\n",strlen(p),strlen(q)); VS2008下输出的是15,3 问下15是怎么来的, size_t strlen_a(const char * str) { size_t length = 0 ; while (*str++ ) ++ length; return length; } 第一个为什么不是6呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
JackBurd
2012-01-08
打赏
举报
回复
7L的应该是printf("p[%d] = %d\n\n",strlen(p),*(p + strlen(p)));
zhusizhi007
2012-01-08
打赏
举报
回复
如果是全局变量或是静态变量,则不一样,由各编译器自己决定,但是单个数组必须保证是连续的,数组连续是很多算法高效的基础,如果不连续,绝大部分程序要崩溃,但是对于两个数组之间的布局,则没有要求...
zhusizhi007
2012-01-08
打赏
举报
回复
注意,在局部变量中,是分配在栈中的,而栈是从上往下生长的,strlen的计算则是从下往上走的,C语言标准中,数组必须是连续的,所以
char p[]={'a','e','r'};
char q[15]={'a','e','r'};
在内存中的布局,p的地址更大,q的地址更小,strlen(p)时,根本不会走到q的结束符处,而是往上走到null处结束
JackBurd
2012-01-08
打赏
举报
回复
我在VC++6.0运行结果为7,3,很不借啊。。。
JackBurd
2012-01-08
打赏
举报
回复
我在VC++2005 下的运行结果为7,3,很不解啊。
牛逼代码
2012-01-03
打赏
举报
回复
向2楼学习
iamnobody
2012-01-03
打赏
举报
回复
[Quote=引用 3 楼 djh512 的回复:]
可是结果一直是15,3
不是随机的
这两个数组的分配位置不是连续的么?不是应该连续往下找么?
[/Quote]
根据C语言标准:
两个连续定义的变量所占的内存不要求续.
所以不同编译器有不同的实现.不是随机的是因为你的编译器在你的不变设置的设置的情况下生成了相同的代码,所以都是15;
不必换一个编译器来试,换一个release状态,你就会发现不同.
绿野耕夫
2012-01-03
打赏
举报
回复
[Quote=引用 3 楼 djh512 的回复:]
可是结果一直是15,3
不是随机的
这两个数组的分配位置不是连续的么?不是应该连续往下找么?
[/Quote]
C语言哪条标准规定了这2个数组分配的位置必须是连续的?
djh512
2012-01-03
打赏
举报
回复
可是结果一直是15,3
不是随机的
这两个数组的分配位置不是连续的么?不是应该连续往下找么?
ProgrammingRing
2012-01-03
打赏
举报
回复
[Quote=引用 2 楼 mingliang1212 的回复:]
char p[]={'a','e','r'};//这里没有结束符'\0';strlen就会一直往后找为'\0'的字符(已经访问越界,结果不能确定)
char q[15]={'a','e','r'};//'r'之后的元素没有显式初始化,被始化为'\0',所以很幸运的,这个可以得到正确的结果..
[/Quote]
嗯。。复习了。。
ccnunlp
2012-01-03
打赏
举报
回复
2楼兄台说得很对
new_buffer
2012-01-03
打赏
举报
回复
char p[]={'a','e','r'};
char q[15]={'a','e','r'};
printf("p address:0x%x\nq address:0x%x\n\n",p,q);
printf("p = %s\nq = %s\n\n",p,q);
printf("p[%d] = %d\n\n",strlen(p) - 1,*(p + strlen(p)));
printf("p=%d\nq=%d\n",strlen(p),strlen(q));
你运行下这段代码就知道了。。。字符串结束符是NULL,也就是 0
AnYidan
2012-01-03
打赏
举报
回复
试试
char p[]={'a','e','r'};
char q[15]={'a','e','r'};
int main()
{
printf("p=%d\nq=%d\n",strlen(p),strlen(q));
system("pause");
return 0;
}
氰客
2012-01-03
打赏
举报
回复
strlen() 是判断字符串长度的吧。字符串以'\0’结束
iamnobody
2012-01-02
打赏
举报
回复
char p[]={'a','e','r'};//这里没有结束符'\0';strlen就会一直往后找为'\0'的字符(已经访问越界,结果不能确定)
char q[15]={'a','e','r'};//'r'之后的元素没有显式初始化,被始化为'\0',所以很幸运的,这个可以得到正确的结果..
秒杀系统八问
本课程从浅到深、结合实际的工作经验...本课程不仅教你如何去设计一个秒杀系统,同时也会锻炼
问题
分析、架构设计、性能优化等能力;自己可以举一反三的去设计其他面临高并发、高可用挑战的系统。
古典
问题
:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
题目:古典
问题
:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 程序分析: 第一个月-----------------1 第二个月--...
【Java】题目:古典
问题
:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
题目:古典
问题
:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 分析: 这是一个斐波那契数列数列
问题
同样,它的...
CEO面试你时喜欢问的十六个
问题
实际上,他们通常只需要问一个
问题
,就可以获知有关求职者的一切信息。有的CEO喜欢问严肃的
问题
,有的则喜欢问有关服装甚至僵尸末日的轻松
问题
,但这些
问题
同样能够体现出求职者的潜力。 在一到...
面试结束后,向面试官要问的
问题
”,一些小伙伴就直接说没啥可问的,这样显得自己对公司对该岗位都不感兴趣,而如果提的
问题
问得好,可能会给面试官对自己的印象加分。 以下总结可询问的
问题
: 自身入职后的
问题
。该职位所在团队的情况;之后的...
C语言
69,379
社区成员
243,073
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章