virmin
驱动牛犊
驱动牛犊
  • 注册日期2004-02-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1399回复:8

问一个我还没想出答案的问题

楼主#
更多 发布于:2004-04-03 08:11
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]
sigh~
virmin
驱动牛犊
驱动牛犊
  • 注册日期2004-02-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-03 08:20
谁能告诉我,我们用汉语字符串给char[]赋值时, 输入到这个char[]里的内容是什么?Unicode?还是其他什么?
sigh~
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于: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])就不能正常显示了。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于: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保存的是什么内容,比较复杂了。

涉及到语言问题,太大了,说的可能有错的。
slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-03 11:58
你能在源代码输入"你好",是因为系统支持中文,能显示出来,假设你用E文的NT,就是你看不懂的东西(当然实际上你也不能输入中文了,外挂中文平台的不谈)。
但是这只是显示上的问题,总之"你好"这个东西,还是用某两个代码表示的,比如说是0x1234和0x5678吧(先不谈汉字编码,假设是2个字节),保存在szTemp,用printf的时候,照样输出0x1234和0x5678,而在中文2K下的console,代码页默认是936,简体中文GBK,能根据0x1234和0x5678,给你显示"你好"。如果你改代码页,比如为US的,就不能显示"你好"了。

printf("%cn", szTemp[0]);2K下不能显示中文才对

至于说szTemp保存的是什么内容,比较复杂了。

涉及到语言问题,太大了,说的可能有错的。


不复杂,保存的就是中文字符的内码:P。至于中文字符的内码是什么东西,这个就复杂了 :D
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2004-04-03 13:43

不复杂,保存的就是中文字符的内码:P。至于中文字符的内码是什么东西,这个就复杂了 :D  


ft,打pp :D
virmin
驱动牛犊
驱动牛犊
  • 注册日期2004-02-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-03 14:09
我明白了, printf("%cn", temp[0])其实也能显示, 不过已经不是
"你" 了, 是另外一个汉字了,内容应该是GB编码的内容吧?我的是简体中文windows2000嘛, 应该是这个吧.
谢谢大家捧场, 放分了
sigh~
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2004-04-03 16:21
我明白了, printf("%cn", temp[0])其实也能显示, 不过已经不是
"你" 了, 是另外一个汉字了,内容应该是GB编码的内容吧?我的是简体中文windows2000嘛, 应该是这个吧.
谢谢大家捧场, 放分了

也不是“另外一个汉字”,汉字仅用一个char是不能表示的。
virmin
驱动牛犊
驱动牛犊
  • 注册日期2004-02-11
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-03 16:43
[quote]我明白了, printf("%cn", temp[0])其实也能显示, 不过已经不是
"你" 了, 是另外一个汉字了,内容应该是GB编码的内容吧?我的是简体中文windows2000嘛, 应该是这个吧.
谢谢大家捧场, 放分了

也不是“另外一个汉字”,汉字仅用一个char是不能表示的。 [/quote]

printf("%cn", temp[0])输出的是两个字符哦,temp[0]和n嘛, 可以试一下, 我这里是这个字 "月悉", 不好意思, 不知道这个字怎么读, 嘿嘿用两个字拼一下.

[编辑 -  4/3/04 by  virmin]
sigh~
游客

返回顶部