社区
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呢?
...全文
169
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',所以很幸运的,这个可以得到正确的结果..
HR问你有什么
问题
问我吗
面试时,面试官询问你是否有
问题
要问是一个展示你对公司及职位关注的好机会。技术面试中,
问题
的影响相对较小,但非技术面试中,恰当的
问题
能体现你的认真态度和对公司文化的理解。避免问过于基础或不相关的
问题
,如公司业务、员工比例等,而应关注公司文化、职位发展和团队挑战等方面。问
问题
能展现你的诚意和对工作的热情,有助于你在众多候选人中脱颖而出。
面试必问——你有什么
问题
问我吗
本文解析了面试官提问“你还有什么
问题
要问我们”的三种情境及应对策略,包括如何根据面试官身份提问,以及在不同面试阶段如何把握提问内容。
这五个
问题
一下就看出阿里通义千问和ChatGPT的差距了
文章通过5个
问题
对比了阿里通义千问和ChatGPT在常识、逻辑推理、实时信息处理等方面的表现,指出ChatGPT在多数
问题
上展现出更强的理解和解答能力,而阿里通义千问在某些方面存在不足。
【求职】大厂常用的面试
问题
,什么是宝洁八大问,八大问有哪些,在面试时,应该怎么回答,有哪些回答思路
宝洁八大问是宝洁招聘经典行为面试
问题
,围绕候选人核心能力展开。本文介绍其具体内容,通用回答遵循STAR法则,还分
问题
给出详细回答思路与示例,如领导力、解决
问题
能力等,最后总结其他
问题
思路并提及回答禁忌。
面试官问你“有什么
问题
问我吗?”,你该如何回答?
本文分享了面试中反问面试官的策略,包括不该问的低级
问题
和值得提出的价值
问题
,帮助求职者展现专业态度,增加获得心仪offer的机会。
C语言
70,039
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章