黑马程序员技术交流社区

标题: 探究关于 “汉字” 是怎么显示输出的一个试验~ [打印本页]

作者: Rdxer    时间: 2015-5-16 00:37
标题: 探究关于 “汉字” 是怎么显示输出的一个试验~
本帖最后由 Rdxer 于 2015-5-16 01:00 编辑

先自爆家门,0515 ios 基础班2期  李xx我的是 win7 + vs2010 ,和mac平台或许有些许区别,不过对此试验影响比较小~   --- 还有就是希望大家别太钻牛角尖
先贴运行结果:


贴 我的代码 真机运行的代码:
  1. #include <conio.h>  // getch() 需要

  2. int _tmain(int argc, _TCHAR* argv[])
  3. {
  4.         char a[]="字";

  5.         printf(" a[] - sizeof = %d\n",sizeof(a));               
  6.         /* sizeof = 3  为什么不是 4 ? 因为我这是 Windows 平台  一个汉字两个字节  ,
  7.         听说是编码的问题两个系统使用汉子的编码不一样,
  8.         win -> gbk(gb2312?)  两个字节,mac  ->  utf-8 3个   (猜测,毕竟我是小白)
  9.         */


  10.     printf(" a[0] = %c  a[1] = %c  \n",a[0],a[1]);        // 分开打印 字符,合并打印,,你看下面
  11.     printf(" a[0] = %d  a[1] = %d  \n",a[0],a[1]);        // 分开打印 其实这里合并打印没区别

  12.         printf(" %%c%%c -> %c%c  \n",a[0],a[1]);                // 合并打印~  这里是重点,,变魔术一样变成一个
  13.         printf(" %%c  %%c ->  --%c--%c--  \n",a[0],a[1]);        // 中间多了一个其他字符都不一样   横杠缺失 ,为什么,看后面结论

  14.     printf("%c",a[0]);                /*合并打印不受代码行影响  ,不仅限于一个 printf 中,
  15.                                                         这说明这是控制台输出那边的问题,不是代码的问题        */
  16.        
  17.     printf("%c\n",a[1]);

  18.     printf("输入 ‘0’ 会输出“字” \n");  
  19.        
  20.         printf("%c",a[0]);
  21.         char c= getch();

  22.         if(c=='0')   
  23.                 printf("%c",a[1]);
  24.        
  25.         printf("<---");/* 此行代码 你会发现  ‘<’ 符号不见了  所以我推断,
  26.                                    字符值 为 一段区间的值时,系统会区分对待,这个看编码库,,  
  27.                                    他会合并两个字符,从库中查对应的字(查找过程类似 ascii,不过字符多了很多),
  28.                                    然后输出如果没有,,,那就是‘?’  */
  29.         getch();   //暂停一下~   控制台程序 运行完之后会立即退出

  30.         return 0;
  31. }
复制代码




然后贴 mac 下的代码,我没运行过,不过,和我推断的结果相差无几吧,,如果差很多你来咬我啊~ ~
  1. #include <conio.h>  // getch() 需要
  2. int main()
  3. {
  4.         char a[]="字";

  5.         printf(" a[] - sizeof = %d\n",sizeof(a));        // 4 不用我说了吧

  6.     printf(" a[0] = %c  a[1] = %c  a[2] = %c  \n",a[0],a[1],a[2]);          // 三个数字
  7.     printf(" a[0] = %d  a[1] = %d  a[2] = %d  \n",a[0],a[1],a[2]);                                          //

  8.         printf(" %%c%%c%%c -> %c%c%c  \n",a[0],a[1],a[2]);                 
  9.         printf(" %%c  %%c ->  --%c--%c--%c--  \n",a[0],a[1],a[2]);   
  10.         /*
  11.         虽然我没试验过,但是我知道  横杠 --  只有前面两条
  12.         */

  13.     printf("%c",a[0]);         
  14.         
  15.     printf("%c",a[1]);         
  16.         
  17.     printf("%c\n",a[2]);

  18.         return 1;
  19. }
复制代码



明天  8.20 上课,,唉,各位奋战在一线的战友们晚安~  最后,,厚颜无耻地求黑马币






作者: Rdxer    时间: 2015-5-16 00:38
过程都在注释里面,,,唉,,第一次发帖~不懂行情
作者: 13673696542    时间: 2015-5-16 16:35
最近论坛里高端代码越来越多啦,看后感觉自己什么都不会。
作者: Rdxer    时间: 2015-5-16 22:30
13673696542 发表于 2015-5-16 16:35
最近论坛里高端代码越来越多啦,看后感觉自己什么都不会。

这个也算高端吗??
作者: 流河虾米    时间: 2015-6-4 19:15
楼主的结论是。。。。?
作者: Rdxer    时间: 2015-6-7 20:59
流河虾米 发表于 2015-6-4 19:15
楼主的结论是。。。。?

汉子是三个字符组成的,,,,  知道为什么显示的时候只占一个位置吗???  因为 用  \b 转意符删掉了前面两个字符的位置
作者: 这是829    时间: 2015-6-7 21:06
围观学习啦。
作者: Rdxer    时间: 2015-6-7 21:44
这是829 发表于 2015-6-7 21:06
围观学习啦。

我知道,,,,




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2