| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1366 人关注过本帖
标题:sizeof,strlen的问题
只看楼主 加入收藏
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
回复 10楼 xiaomarn
是的,\010是十进制的8,\032是十进制的26,那这样不是123826吗?不应该是6吗,为什么会是5?

我是初学者
2010-11-30 17:30
flyingcat
Rank: 4
来 自:HDU
等 级:业余侠客
威 望:2
帖 子:55
专家分:230
注 册:2010-7-18
收藏
得分:0 
char a[]="123\010\032";
汗,\010和\032可以解析成八进制……
对应第8个ascii码和第26个ascii码的字符
这个情况用\000来表示字符结尾……

是ascii码相对应的字符,不是直接的数字

[ 本帖最后由 flyingcat 于 2010-11-30 17:36 编辑 ]
2010-11-30 17:35
xiaomarn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:348
专家分:2026
注 册:2009-3-18
收藏
得分:1 
八进制数也只占一个字节行不,应该是
db  49,50,51,8,26,0
所以我们用printf("%s",a);
打印字符串时会出现123+asc(8)+asc(26)五个字符,当由于26是退格键,它会把前面的asc(8)给擦了,最会只看到123   
2010-11-30 17:39
flyingcat
Rank: 4
来 自:HDU
等 级:业余侠客
威 望:2
帖 子:55
专家分:230
注 册:2010-7-18
收藏
得分:0 
回复 13楼 xiaomarn
呃,先擦3再输出asc(26)
12 + asc(26)
2010-11-30 17:42
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
回复 12楼 flyingcat
1,我调试过程中发现要是改为123\0100\032,就是6了, 这就是为什么呢?\0102不是64吗,应该是对应ascii64的那个字符才对啊,怎么就变成6了??
2,还有前面的123为什么不是对应的ascii码,后面8进制的就是对应的ascii码呢?
3,我把\010改为\078也不出错,还是返回6,这又是为什么呢?

我是初学者
2010-11-30 17:48
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
回复 14楼 flyingcat
饿,么人解答了么?

我是初学者
2010-11-30 18:15
flyingcat
Rank: 4
来 自:HDU
等 级:业余侠客
威 望:2
帖 子:55
专家分:230
注 册:2010-7-18
收藏
得分:2 
是这样的
\XXX
XXX代表一个八进制数,
123\0100\032应该是这样
先把\010转成十进制是8
\032转成十进制是26
所以strlen是
123 + asc(8) + 0 + asc(26)
这样子就是6个字符
ascii值为8的是退格符
输出的时候是120 + asc(26)
转义符都是以反斜杠\开头的,所以123并不代表转义字符

另外\010改成\078后,8已经不属于八进制的,所以会把\07当成十六进制处理,也就是转成为7的十进制数
处理对应的ascii码为7的字符
123\0780\032
最后应该是123 + asc(7) + 80 + asc(26)
长度应该是7
2010-11-30 18:24
aiyinsitan
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:183
专家分:177
注 册:2010-4-22
收藏
得分:0 
回复 10楼 xiaomarn
你的程序我的编译器怎么运行是这样的结果
图片附件: 游客没有浏览图片的权限,请 登录注册
怎么回事??我的事VC6.0
2010-11-30 22:49
kevin_zh
Rank: 4
来 自:农村
等 级:业余侠客
威 望:1
帖 子:129
专家分:250
注 册:2010-8-14
收藏
得分:0 
学习了

"please input a number :\n"
2010-12-01 08:05
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
回复 17楼 flyingcat
谢谢,不过我还是不懂如果是123\0100\032的话,为什么不是
\0100转为十进制的64,变成123+ascii(64)+ascii(32)呢?

我是初学者
2010-12-01 09:27
快速回复:sizeof,strlen的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016896 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved