本帖最后由 Rdxer 于 2015-5-16 01:00 编辑
先自爆家门,0515 ios 基础班2期 李xx我的是 win7 + vs2010 ,和mac平台或许有些许区别,不过对此试验影响比较小~ --- 还有就是希望大家别太钻牛角尖
先贴运行结果:
贴 我的代码 真机运行的代码:- #include <conio.h> // getch() 需要
- int _tmain(int argc, _TCHAR* argv[])
- {
- char a[]="字";
- printf(" a[] - sizeof = %d\n",sizeof(a));
- /* sizeof = 3 为什么不是 4 ? 因为我这是 Windows 平台 一个汉字两个字节 ,
- 听说是编码的问题两个系统使用汉子的编码不一样,
- win -> gbk(gb2312?) 两个字节,mac -> utf-8 3个 (猜测,毕竟我是小白)
- */
- printf(" a[0] = %c a[1] = %c \n",a[0],a[1]); // 分开打印 字符,合并打印,,你看下面
- printf(" a[0] = %d a[1] = %d \n",a[0],a[1]); // 分开打印 其实这里合并打印没区别
-
- printf(" %%c%%c -> %c%c \n",a[0],a[1]); // 合并打印~ 这里是重点,,变魔术一样变成一个
- printf(" %%c %%c -> --%c--%c-- \n",a[0],a[1]); // 中间多了一个其他字符都不一样 横杠缺失 ,为什么,看后面结论
- printf("%c",a[0]); /*合并打印不受代码行影响 ,不仅限于一个 printf 中,
- 这说明这是控制台输出那边的问题,不是代码的问题 */
-
- printf("%c\n",a[1]);
- printf("输入 ‘0’ 会输出“字” \n");
-
- printf("%c",a[0]);
- char c= getch();
- if(c=='0')
- printf("%c",a[1]);
-
- printf("<---");/* 此行代码 你会发现 ‘<’ 符号不见了 所以我推断,
- 字符值 为 一段区间的值时,系统会区分对待,这个看编码库,,
- 他会合并两个字符,从库中查对应的字(查找过程类似 ascii,不过字符多了很多),
- 然后输出如果没有,,,那就是‘?’ */
- getch(); //暂停一下~ 控制台程序 运行完之后会立即退出
- return 0;
- }
复制代码
然后贴 mac 下的代码,我没运行过,不过,和我推断的结果相差无几吧,,如果差很多你来咬我啊~ ~- #include <conio.h> // getch() 需要
- int main()
- {
- char a[]="字";
- printf(" a[] - sizeof = %d\n",sizeof(a)); // 4 不用我说了吧
- printf(" a[0] = %c a[1] = %c a[2] = %c \n",a[0],a[1],a[2]); // 三个数字
- printf(" a[0] = %d a[1] = %d a[2] = %d \n",a[0],a[1],a[2]); //
-
- printf(" %%c%%c%%c -> %c%c%c \n",a[0],a[1],a[2]);
- printf(" %%c %%c -> --%c--%c--%c-- \n",a[0],a[1],a[2]);
- /*
- 虽然我没试验过,但是我知道 横杠 -- 只有前面两条
- */
- printf("%c",a[0]);
-
- printf("%c",a[1]);
-
- printf("%c\n",a[2]);
- return 1;
- }
复制代码
明天 8.20 上课,,唉,各位奋战在一线的战友们晚安~ 最后,,厚颜无耻地求黑马币
|
|