| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 326 人关注过本帖
标题:请教一个问题~~谢了
只看楼主 加入收藏
cailubaby
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-8-11
收藏
 问题点数:0 回复次数:5 
请教一个问题~~谢了
#include <stdio.h>
#include <string.h>
main()
{char x[]="STRING";
 x[0]=0;x[1]='\0';x[2]='0';
 printf("%d  %d\n",sizeof(x),strlen(x));
}
 问题:1、输出的结果为什么是7 0 ?
       2、把 x[]="STRING";直接改为x[]="0\00ING";输出的结果为什么是不一致的??是6 1
       3、把 x[]="STRING";直接改为x[]="0\00";这时的结果是:3  1  那是不是说明\00只占一个字节?

搜索更多相关主题的帖子: include 
2012-08-11 19:01
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
strlen测得是数组的有效长度,而sizeof测得是数组所占的内存,即字节数,而\00是一个八进制数,相当于一个字符,所以只占一个字节;另外,第三个你错了,结果是3  0,而不是3  1,至于是为什么,得求大神解决了,over。
2012-08-15 09:45
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:0 
呵呵,结果没错。
第一次是7,0,sizeof为空间大小,长度7,strlen为数组长度,因为第一个字节为0,长度为0;
第二次是6,1,空间大小为6,长度第一个字节为字符‘0’,第二个字节为0,长度为1;
第三次同理第二次。
2012-08-15 09:51
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
我有问题,因为asc值为0的话,那么就是'\0',所以只要用strlen,遇到第一个'\0'为止,因此应该都是0,不知是否错误?答案应该就是6   0 ,3   0
2012-08-15 10:41
silent_world
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:258
专家分:1138
注 册:2011-9-24
收藏
得分:0 
对,你说的完全正确,strlen遇到第一个'\0'为止。

分析楼主的字符串x[]="0\00ING";
分别为'0','\00','I','N','G',进而分析器ascII码可知,长度为1,包含一个字符‘0’。

当然,楼主没有说清楚,如果字符串变化后,仍然执行
x[0]=0;x[1]='\0';x[2]='0';
结果应该是和你说的那样。

[ 本帖最后由 silent_world 于 2012-8-15 10:56 编辑 ]
2012-08-15 10:52
chuanglan
Rank: 2
等 级:论坛游民
威 望:2
帖 子:91
专家分:29
注 册:2012-8-14
收藏
得分:0 
不是。。他后来在下面有重新赋值了。。。所一x[0]的之为0,也就是字符'\0'的asc值。。因此楼主的答案是 6   0,3    0.
2012-08-15 11:43
快速回复:请教一个问题~~谢了
数据加载中...
 
   



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

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