| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1284 人关注过本帖
标题:字符数组问题
只看楼主 加入收藏
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
结帖率:90.63%
收藏
已结贴  问题点数:10 回复次数:8 
字符数组问题
char x[]=‘‘12346";char y[]={'1','2','3','4','5'}为什么x数组的长度到大于y数组的长度?
图片附件: 游客没有浏览图片的权限,请 登录注册


而题目:字符串"string"的长度为--(6)。
为什么不是7?
搜索更多相关主题的帖子: 字符串 
2016-07-05 12:31
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
#include<stdio.h>
#include<stdio.h>
void main()
{
    static char x[]="12345";
    static char y[]={'1','2','3','4','5'};
    printf("x=%d  y=%d",strlen(x),strlen(y));
    return 0;
}
2016-07-05 12:33
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:10 
字符串和字符数组还是有点点区别的,给你看下我在一本书上看到的,有和没有\0这个的区别。所以有的编译器显示长度不一样。
不过不知道是不是编译器不同结果也不同,我的显示两个都是5,至于你显示的y[]是10,我估计是5个数字+4个逗号+\0,不过我感觉不合理啊,你的数字使用单引号括起来的,中间逗号间隔的,为啥长度是10啊。你确定你的图是你下面代码输出的?还有你用什么IDE?
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册

不过你main是void,你后面还有个return 0;话说你的编译器没有警告么。。

[此贴子已经被作者于2016-7-5 12:53编辑过]

2016-07-05 12:50
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
回复 3楼 wanglianyi1
还有最后那个问题你没看到,能答一下?
2016-07-05 12:59
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 4楼 _Strike
而题目:字符串"string"的长度为--(6)。
为什么不是7?
这个问题嘛?在你的代码里我没看到string是哪个,所以不知道你说的指什么呢
不过我发现了你的程序里定义的x[],y[]前面都有static修饰词,后面输出都是5,后面把static去掉你再试试你看输出是多少?
如果把static去掉,然后你再在[]自己写上数组长度7,你再试试

[此贴子已经被作者于2016-7-5 13:32编辑过]

2016-07-05 13:03
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
回复 5楼 wanglianyi1
那时另一个题目哦
2016-07-05 13:32
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:0 
回复 6楼 _Strike
哦,明白了,你是问字符串“string”长度是为什么是6是吧,这个是6个字母啊,不过我在书上看到的应该是7啊,最后会自动加上\0,不知道是不是编译不同的区别,你看下这个:把x[]前面的static去掉和不去掉,会影响到后面y的长度哦,因为有没有static使得x存储的位置不同,而同时你[]没有写上数组长度,就会让strlen自己计算长度,它从参数表示的地址往后找,找到第一个'\0',即串尾。然后计算'\0'至首地址的“距离”,即隔了几个字符,从而得出长度。
例如:char x[]={0xBC,0xDD,0xCA};中,实际上是定义了一个char型的数组,而由于x[0],即0xBC开始往后找,一直到0xCA,都没'\0',所以会继续往后。。。当然,实际上往后找到的是其他值。
程序代码:
#include<stdio.h>
#include<string.h>
int main()
{
   static char x[ ]="string";
    char y[ ]={'1','2','3','4','5'};
    printf("x=%d  y=%d",strlen(x),strlen(y));
    return 0;
}

总之我感觉最后就是如果不明确写出数组长度,可能不会影响你的使用,但是会造成一定程度的内存浪费

[此贴子已经被作者于2016-7-5 13:41编辑过]

2016-07-05 13:39
_Strike
Rank: 2
等 级:论坛游民
帖 子:133
专家分:72
注 册:2016-3-22
收藏
得分:0 
回复 7楼 wanglianyi1
哦哦
谢谢
2016-07-05 13:56
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用_Strike在2016-7-5 12:33:24的发言:

#include<stdio.h>
#include<stdio.h>
void main()
{
    static char x[]="12345";
    static char y[]={'1','2','3','4','5'};
    printf("x=%d  y=%d",strlen(x),strlen(y));
    return 0;
}

x是字符串,y是数组,不同的吧?
这样看看:
#include <stdio.h>
main()
{
    char x[] = "12345";
    char y[] = {'1','2','3','4','5'};
    printf("xSize=%d  ySize=%d", sizeof(x), sizeof(y));
}
再看看这样:
#include<stdio.h>
#include<string.h>
void main()
{
    static char x[]="12345";
    static char y[]={'1','2','3','4','5','\0'};
    printf("x=%d  y=%d",strlen(x),strlen(y));
    return 0;
}
2016-07-05 15:07
快速回复:字符数组问题
数据加载中...
 
   



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

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