阅读:1401回复:8
问一个我还没想出答案的问题
char szTemp[100] = "你好";
printf("%s", szTemp); 为什么能正确输出这个字符串??ANSI也支持汉语? printf("%c", szTemp[0]); printf("%c", szTemp[1]); 结果竟然是 "你", 哪位指点我一下 [编辑 - 4/3/04 by virmin] [编辑 - 4/3/04 by virmin] |
|
|
沙发#
发布于:2004-04-03 16:43
[quote]我明白了, printf("%cn", temp[0])其实也能显示, 不过已经不是 也不是“另外一个汉字”,汉字仅用一个char是不能表示的。 [/quote] printf("%cn", temp[0])输出的是两个字符哦,temp[0]和n嘛, 可以试一下, 我这里是这个字 "月悉", 不好意思, 不知道这个字怎么读, 嘿嘿用两个字拼一下. [编辑 - 4/3/04 by virmin] |
|
|
板凳#
发布于:2004-04-03 16:21
我明白了, printf("%cn", temp[0])其实也能显示, 不过已经不是 也不是“另外一个汉字”,汉字仅用一个char是不能表示的。 |
|
地板#
发布于:2004-04-03 14:09
我明白了, printf("%cn", temp[0])其实也能显示, 不过已经不是
"你" 了, 是另外一个汉字了,内容应该是GB编码的内容吧?我的是简体中文windows2000嘛, 应该是这个吧. 谢谢大家捧场, 放分了 |
|
|
地下室#
发布于:2004-04-03 13:43
ft,打pp :D |
|
5楼#
发布于:2004-04-03 11:58
你能在源代码输入"你好",是因为系统支持中文,能显示出来,假设你用E文的NT,就是你看不懂的东西(当然实际上你也不能输入中文了,外挂中文平台的不谈)。 不复杂,保存的就是中文字符的内码:P。至于中文字符的内码是什么东西,这个就复杂了 :D |
|
6楼#
发布于:2004-04-03 11:04
你能在源代码输入"你好",是因为系统支持中文,能显示出来,假设你用E文的NT,就是你看不懂的东西(当然实际上你也不能输入中文了,外挂中文平台的不谈)。
但是这只是显示上的问题,总之"你好"这个东西,还是用某两个代码表示的,比如说是0x1234和0x5678吧(先不谈汉字编码,假设是2个字节),保存在szTemp,用printf的时候,照样输出0x1234和0x5678,而在中文2K下的console,代码页默认是936,简体中文GBK,能根据0x1234和0x5678,给你显示"你好"。如果你改代码页,比如为US的,就不能显示"你好"了。 printf("%cn", szTemp[0]);2K下不能显示中文才对 至于说szTemp保存的是什么内容,比较复杂了。 涉及到语言问题,太大了,说的可能有错的。 |
|
7楼#
发布于:2004-04-03 10:09
系统用2个字节来表示汉语,其实你在内存中存放的是UNICODE的字符,你自己查看下内存会发现“你好”占用了4个字节的空间,由于WINNT内核本身支持UNICODE,所以你调用库函数会正确显示字符,但WIN9X下我想可能就会有问题,你测试下,还有
#include "stdio.h" void main( ) { char szTemp[100] = "你好"; printf("%s\n", szTemp); //为什么能正确输出这个字符串??ANSI也支持汉语? printf("%c\n", szTemp[0]); printf("%c\n", szTemp[1]); } 这个例子中szTemp[0])和szTemp[1])就不能正常显示了。 |
|
|
8楼#
发布于:2004-04-03 08:20
谁能告诉我,我们用汉语字符串给char[]赋值时, 输入到这个char[]里的内容是什么?Unicode?还是其他什么?
|
|
|