分页: 1 / 1
[问题]这是gcc的bug还是我的程序有问题?(关于中文字符的输出)(已解决)
发表于 : 2007-10-09 12:32
由 imjie
代码: 全选
#include<stdio.h>
int main(){
int i;
char chi[]="零一二";
for(i=0;i<=5;i++){
printf("%c",chi[i]);
}
printf("\n");
return 0;
}
输出的是
零一
代码: 全选
#include<stdio.h>
int main(){
int i;
char chi[]="零一二";
for(i=0;i<=9;i++){
printf("%c",chi[i]);
}
printf("\n");
return 0;
}
输出的是
零一二
发表于 : 2007-10-09 12:46
由 imjie
经过高手指导,原来在gcc里中文要三个字符,前两个就可以显示一个字?
发表于 : 2007-10-09 12:51
由 bones7456
uft8的中文本来就要3个字节吧,哪能这么容易就怀疑是人家gcc的bug啊?

发表于 : 2007-10-09 13:03
由 fearmind
代码: 全选
#include<stdio.h>
int main(){
int i;
char chi[]="零一二";
for(i=0;i<=5;i++){
printf("%c",chi[i]);
}
printf("\n");
return 0;
}
在程序的后面加上一句
代码: 全选
printf("Size of chi-->%d\n",sizeof(chi));
你会看到输出为10,即占用了10个字节的空间。
也许正如楼上所说,中文字符在gcc中占3个字节,最后一个可能是字符"\0",作为字符串结束的标志。
发表于 : 2007-10-09 13:32
由 imjie
fearmind 写了:代码: 全选
#include<stdio.h>
int main(){
int i;
char chi[]="零一二";
for(i=0;i<=5;i++){
printf("%c",chi[i]);
}
printf("\n");
return 0;
}
在程序的后面加上一句
代码: 全选
printf("Size of chi-->%d\n",sizeof(chi));
你会看到输出为10,即占用了10个字节的空间。
也许正如楼上所说,中文字符在gcc中占3个字节,最后一个可能是字符"\0",作为字符串结束的标志。
哈哈,立刻明白了!谢谢 merci
发表于 : 2007-10-09 14:48
由 windwiny
UTF-8 才要3个字节存一个汉字,GBK就用2个字节
发表于 : 2007-10-09 18:58
由 imjie
windwiny 写了:UTF-8 才要3个字节存一个汉字,GBK就用2个字节
关键在此,我之前没有注意到
发表于 : 2007-10-10 6:49
由 xhy
C语言处理编码得小心熠熠的
python就轻松多了