| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2740 人关注过本帖
标题:字符数组的小问题,新人求解
只看楼主 加入收藏
·charles
Rank: 2
等 级:论坛游民
帖 子:67
专家分:48
注 册:2015-3-23
结帖率:80%
收藏
 问题点数:0 回复次数:34 
字符数组的小问题,新人求解
#include "stdio.h"
#include "string.h"
int main()
{
    char c1[10]={'i',' ','a','m',' ','h','a','p','p','y'};
    printf("%s",c1);
    //puts(c1);
    return 0;
}

为什么后面有乱码
搜索更多相关主题的帖子: include return 
2015-04-18 20:10
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
越界了  10改成100就没了

风回小院庭芜绿,柳眼春相续
2015-04-18 20:22
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
你这是一个字符数组,而不是字符串

你醒了?快起来敲代码!!
2015-04-18 20:34
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
越界是没有的,因为数组长度定义为10,也的确放了10个字符进去。
只是,你这个c1不是字符串,而是一个单纯的字符数组。
也就是说你的c1的最后一个元素不是\0

你要明白puts()函数是如何工作的:puts会把字符串里的字符一个一个输出,直到它了末尾的\0就停止输出字符,
然而你这个字符数组末尾没有\0,puts就会一直往后找\0,一边输出字符,一边找\0。

它找了很久,终于碰运气找到了一个\o,但是在这个过程中,它也输出了许多垃圾,这就是乱码的由来

你醒了?快起来敲代码!!
2015-04-18 20:42
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 3楼 code力力
越界而已 跟那没关系

风回小院庭芜绿,柳眼春相续
2015-04-18 20:42
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
错误原因:你错误地把一个字符数组当做字符串输出了

如果你要定义字符串。推荐这样:char str[]="ABCDEF"
如果你要自己指定长度,请在有效字符长度基础上+1,比如你上面那个字符串共10个字符,你应把

字符串长度定为11,多于的一个用来\0
                               char str[11]="i am happy";   //\0不需要你自己添加,它是自动补上去的

你醒了?快起来敲代码!!
2015-04-18 20:49
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
回复 5楼 纳兰伽香
那你的意思是:所有的字符数组都要有\0来做最后一个元素?那字符数组和字符串有什么区别?



char str[2]={'A','B'};  //难道这是越界?


看书去吧

你醒了?快起来敲代码!!
2015-04-18 20:54
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
回复 5楼 纳兰伽香
谭浩强的 《c程序设计》p155

他说越界了吗?

他说这是字符串了吗?

他说可以用puts()把它输出了吗?

不说什么外著金典了,谭浩强的书你都没消化,我只能为你天天在这里为网友解惑而呵呵

你醒了?快起来敲代码!!
2015-04-18 21:00
纳兰伽香
Rank: 10Rank: 10Rank: 10
来 自:北京
等 级:贵宾
威 望:10
帖 子:426
专家分:1650
注 册:2015-4-5
收藏
得分:0 
回复 8楼 code力力
作为一个男人 你心胸怎么那么狭窄?学术的讨论涉及不到人身攻击吧?
有点涵养。真心懒得跟你费口舌。你还是自己看清楚再说吧。

初始化字符数组有两种方法,
    一种是:
    char array[10]={"hello"};
  另一种是:
    char array[10]={'h','e','l','l','o'};
  第一种方法用途较广,初始化时,系统自动在数组没有填值的位置用,'/0'补上。另外, 这种方法中的花括号可以省略,即能表示成:
    char array[10]="hello";  //所以你还是弄清楚 这个是怎么来的吧
  第二种方法一次一个元素地初始化数组,如同初始化整型数组。这种方法通常用于输入不容易在键盘上生成的那些不可见字符。

    这里不要忘记为最后的,'/0'分配空间。如果要初始化一个字符串"hello",那为它定义的数组至少有6个数组元素。

风回小院庭芜绿,柳眼春相续
2015-04-18 21:18
code力力
Rank: 5Rank: 5
来 自:宜昌
等 级:职业侠客
威 望:2
帖 子:215
专家分:338
注 册:2015-1-12
收藏
得分:0 
那请求你回答我  char str[2]={'A','B'}; 是否越界?

并不是每一和字符数组都要当字符串来用的。也许我只是用字符数组来储存一些字符呢?

你说越界,然后把10改为100,只是剩下的90个字符被自动初始化为\0,而达到了变身为字符串的目的。

你醒了?快起来敲代码!!
2015-04-18 21:28
快速回复:字符数组的小问题,新人求解
数据加载中...
 
   



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

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