分页: 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啊? :lol:

发表于 : 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就轻松多了