搜索
编程论坛
→
开发语言
→
『 C语言论坛 』
→ 关于linux下用C数组处理中文的问题~~~
标题:
关于linux下用C数组处理中文的问题~~~
只看楼主
CLuck
等 级:
论坛游民
帖 子:23
专家分:17
注 册:2011-5-6
结帖率:
100%
楼主
已结贴
√
问题点数:10 回复次数:8
关于linux下用C数组处理中文的问题~~~
最近在做一个题,题目中有些中文需要处理,于是本人就用到了二维数组,却发现输出时总会有乱码,而在虚拟机中的windows下做同样的测试,却一切正常,求解~~~
数组定义为char型a[2][3],存两个汉字,然后输出这两个汉字,后面就总会带着一些乱码。定义一维数组a[3]存一个汉字时也是一样,输出该汉字后还带乱码。我在想是不是数组的最后一位中的“\0”在作祟,有谁了解的,还望多多指教.
搜索更多相关主题的帖子:
虚拟机
windows
中文
汉字
2012-05-11 12:19
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
2
楼
得分:10
两种系统的编码不一样的
授人以渔,不授人以鱼。
2012-05-11 12:44
CLuck
等 级:
论坛游民
帖 子:23
专家分:17
注 册:2011-5-6
第
3
楼
得分:0
我知道编码是不同的,我也用unicode编码试过了,可输出的时候还是有乱码,我就想知道怎么解决数组输出后带乱码的问题?
2012-05-11 12:58
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
4
楼
得分:0
你调试出那两个汉字在utf-8编码是多少字节?你就知道3byte容纳得了?而且,我又不知道你是怎么把汉字存进那个数组的,你说有0,在哪里没人知道。既不知道你怎么储存,也不知道你怎么输出。
[
本帖最后由 TonyDeng 于 2012-5-11 13:03 编辑
]
授人以渔,不授人以鱼。
2012-05-11 12:59
CLuck
等 级:
论坛游民
帖 子:23
专家分:17
注 册:2011-5-6
第
5
楼
得分:0
那好吧,我就是写了个测试的小程序
#include <stdio.h>
main()
{
char a[2][3]={"存","放"};
printf("%s ",a[0]);
printf("%s ",a[1]);
}
存两个字,因为一个汉字是两个字节,而按字符串存的时候末尾有个"\0"结束符,所以我定义的数组大小是a[2][3]。这个程序在windows下面没什么问题,可是在我的linux下,输出了“存”,“放”两个字后,后面还有几个字节的乱码。如图:
2012-05-11 13:46
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
6
楼
得分:0
utf-8编码下,“存”和“放”两个字都是3字节,你用3字节来存放,0结束符已经溢出了。
[
本帖最后由 TonyDeng 于 2012-5-11 13:55 编辑
]
授人以渔,不授人以鱼。
2012-05-11 13:53
CLuck
等 级:
论坛游民
帖 子:23
专家分:17
注 册:2011-5-6
第
7
楼
得分:0
刚改了下,能行了。太感谢了,以前我们学的都是基于windows的,我是自己转到里linux下的,以前只知道汉字是占两个字节,却不知道utf-8下是3个字节,受教了
,谢谢版主!
2012-05-11 13:58
TonyDeng
等 级:
贵宾
威 望:
304
帖 子:25859
专家分:48889
注 册:2011-6-22
第
8
楼
得分:0
utf-8编码的字长是可变的,最长可到4字节哦,多留一点空间。
授人以渔,不授人以鱼。
2012-05-11 13:59
CLuck
等 级:
论坛游民
帖 子:23
专家分:17
注 册:2011-5-6
第
9
楼
得分:0
哦,这部分我还得找点资料好好看看啊。
2012-05-11 17:17
9
1/1页
1
参与讨论请移步原网站贴子:
https://bbs.bccn.net/thread-367331-1-1.html
关于我们
|
广告合作
|
编程中国
|
清除Cookies
|
TOP
|
手机版
编程中国
版权所有,并保留所有权利。
Powered by
Discuz
, Processed in 2.049981 second(s), 9 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved