| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4169 人关注过本帖
标题:为什么会出现乱码?
只看楼主 加入收藏
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
2楼的代码,如果你用VS2010编辑器,它会告诉你定义的数组c[5]不能用6个字符的数组("*****"是5个星号加1个'\0')来初始化。

授人以渔,不授人以鱼。
2011-10-17 00:59
Eg_a
Rank: 1
等 级:新手上路
帖 子:66
专家分:9
注 册:2011-4-23
收藏
得分:0 
回复 4楼 chimeixing
现在第二个将s2中的字符复制到s1的那个代码用win-tc测试成功了,早晨多个乱码“?”,就多这一个,不过第一个还是有乱码,求解
2011-10-17 01:00
Eg_a
Rank: 1
等 级:新手上路
帖 子:66
专家分:9
注 册:2011-4-23
收藏
得分:0 
回复 11楼 TonyDeng
我看的谭浩强的书,用的vc6.0,书上就这么讲的,我也做了很多例题,没出现过这种错误,不知道这个是为什么,换了编译器也还是那样
2011-10-17 01:03
Eg_a
Rank: 1
等 级:新手上路
帖 子:66
专家分:9
注 册:2011-4-23
收藏
得分:0 
回复 11楼 TonyDeng
二楼的代码已弄清楚,原来一直用循环嵌套printf函数输出了,用变量自加控制输出的长度,忽略了'\0'的存在,不过puts需要
但还想问一句,我未添加prntf("\n");为何会换行?是否与数组结尾的'\0'有关?
2011-10-17 01:17
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
你那个写法一定出乱码!你的编译器不给力,其实这是在编译阶段就应能检测出来的错误,你将编译器的警告级别开到最大,应该得到警告。如果编译器不警告,这种写法的代码,在执行时会出现“未定义行为”——分配给c[5]的空间是5byte,但用了6byte的数据填入这个空间,多出来的那1byte,不知覆盖了什么数据(不过这种初始化行为怎么操作,是编译器的自由)。

对这种情况,你最稳妥的做法,是不要明确c[5],写成c[] = "*****",就不会出现错误。注意:你后面的输出,是0-4,总共5char,但事实上c[5]只应有4char,到第5char时,出现什么问题,就取决于编译器在前面初始化时给这个位置写入什么东西。当整个程序只有"*****"这个静态数据时(书本上可能就是如此),似乎没有什么问题,但你现在的程序,静态数据不止这一个(还有你后来写的空格串,也极可能截断"*****"的第6位'\0'把自己接上去),问题就出现了。

授人以渔,不授人以鱼。
2011-10-17 01:18
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:10 
回复 14楼 Eg_a
每个puts()输出都自动给你加一个'\n',这是这个函数内定的,不然不叫puts()

授人以渔,不授人以鱼。
2011-10-17 01:22
Eg_a
Rank: 1
等 级:新手上路
帖 子:66
专家分:9
注 册:2011-4-23
收藏
得分:0 
回复 15楼 TonyDeng
谢谢提醒,非常感谢,真的
2011-10-17 01:29
Eg_a
Rank: 1
等 级:新手上路
帖 子:66
专家分:9
注 册:2011-4-23
收藏
得分:0 
回复 16楼 TonyDeng
谢谢,你和楼上诸位都给了很大的帮助,谢谢
2011-10-17 01:30
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
你这种常量字面值初始化的数组,不要写死元素个数5,让编译器自己计数,绝对不会计错,在后面使用时,用strlen()求元素个数,而不要用现在的魔数5。这样写,程序的可维护性就高了,无论怎么改那个字面值,后面都不用改,否则,后面一连串数字改死你。

授人以渔,不授人以鱼。
2011-10-17 01:34
快速回复:为什么会出现乱码?
数据加载中...
 
   



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

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