| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1687 人关注过本帖
标题:请教一个有关strlen()与sizeof()的问题。
只看楼主 加入收藏
邹阳
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:124
专家分:402
注 册:2015-10-8
结帖率:73.68%
收藏
已结贴  问题点数:20 回复次数:6 
请教一个有关strlen()与sizeof()的问题。
#include<stdio.h>
int main()
{
    char a[]="\t\"\\\n\'\065\08AB";
    printf("%d %d",strlen(a),sizeof(a));
}

运行出来,为什么一个是6,一个是11呢?
搜索更多相关主题的帖子: strlen sizeof char printf 运行 
2019-04-07 19:15
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:395
专家分:2640
注 册:2018-3-30
收藏
得分:0 
因为 \0 是字符串结束标志符。字符串提前结束了,后面的不算。

saber,别哭.
2019-04-07 20:04
ZJYTY
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:92
专家分:700
注 册:2018-12-20
收藏
得分:10 
strlen 测量的是字符的实际长度,以'\0' 结束。而sizeof 测量的是字符的分配大小。

char a[]="\t\"\\\n\'\065\08AB";
里面的字符分别为\t,\",\\,\n,\',\065,\0,8,A,B,\0
所以strlen(a) = 6;sizeof(a) = 11;

-------------------------------若有不当之处,敬请谅解-------------------------------
2019-04-07 20:14
邹阳
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:124
专家分:402
注 册:2015-10-8
收藏
得分:0 
回复 3楼 ZJYTY
请问为什么\065不需要拆分,而\08就可以拆分呢?

I'm a new comer
2019-04-07 21:54
幻紫灵心
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山咔咔里面
等 级:贵宾
威 望:53
帖 子:395
专家分:2640
注 册:2018-3-30
收藏
得分:10 
转义字符 \xxx 其中xxx为八进制ASCLL码
\08A不符合八进制,只能当 \0,8,A 处理

saber,别哭.
2019-04-07 22:19
ZJYTY
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:92
专家分:700
注 册:2018-12-20
收藏
得分:0 
回复 4楼 邹阳
同五楼

-------------------------------若有不当之处,敬请谅解-------------------------------
2019-04-08 09:11
邹阳
Rank: 6Rank: 6
等 级:侠之大者
威 望:4
帖 子:124
专家分:402
注 册:2015-10-8
收藏
得分:0 
回复 5楼 幻紫灵心
谢谢,结合书籍,搞明白了。

I'm a new comer
2019-04-11 00:04
快速回复:请教一个有关strlen()与sizeof()的问题。
数据加载中...
 
   



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

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