A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 寇亮 中级黑马   /  2014-8-7 21:19  /  3792 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 寇亮 于 2014-8-14 10:05 编辑

学习字符串时遇到汉字占字节个数的问题,相同的代码分别在MAC上和windows上进行编译,运行结果不同。截图见附件:单个汉字在Mac下占3个字节,在windows下占2个字节。分析出现这种情况有两个可能的原因:
1.在不同环境下汉字的编码方式不同导致;
2.Mac和windows的C语言编译器不同导致(windows下编译器为gcc 4.7.1)。

求高手解答,具体原因是什么?

Mac下运行结果.png (15.22 KB, 下载次数: 221)

MAC下运行结果

MAC下运行结果

QQ截图20140807210618.png (7.65 KB, 下载次数: 292)

windows下运行结果

windows下运行结果

13 个回复

倒序浏览
经过实验可以认定真正的原因应该是编码方式不同。windows下分别用记事本和Codeblocks编辑上图代码,分别编译连接,用记事本编辑的代码显示汉字占两个字符,codeblocks编辑的代码汉字占三个字符。
回复 使用道具 举报
学习了 感谢楼主分享
回复 使用道具 举报
寇亮 发表于 2014-8-7 21:30
经过实验可以认定真正的原因应该是编码方式不同。windows下分别用记事本和Codeblocks编辑上图代码,分别编 ...

如果没记错的话, windows的中文版应该用bg2312, 而mac一般是用utf-8的吧, 不是很清楚这个
回复 使用道具 举报
我记得教程中好像说这个长度和平台相关。
回复 使用道具 举报
你们上手就做的IOS么,我还在补习C+呢。。差距挺大的@@
回复 使用道具 举报
我就看看……
回复 使用道具 举报
学习学习!!
回复 使用道具 举报
记得没错的化,mac电脑中如果直接用终端编译也是两个字节,但是用xcode编译就是3个字节。原因是编译器不同,mac电脑是UNIX系统原生的gcc编译器,而xcode用的是clong编译器。没个编译器所遵守的汉子表(在原代码中是无法显示汉子类似于C语言中的ASCII码表)clong遵守的是UTF8这个。以前读过相关书籍,有错误也难免,希望看到错误给予指出。
回复 使用道具 举报
我感觉是编译器导致的结果,或者你的输入法有误
回复 使用道具 举报
王绍明 发表于 2014-8-10 08:32
我感觉是编译器导致的结果,或者你的输入法有误

用的是同一个编译器,所以可以排除编译器的影响。
回复 使用道具 举报
本帖最后由 寇亮 于 2014-8-14 09:59 编辑

通过以下实验可以证明,是因为编码方式不同导致汉字所占字节数不同。

1. 新建文本文档,用记事本打开,输入以下代码:
  
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.     int size = strlen("哈ha");
  6.     printf("%d",size);
  7.     return 0;
  8. }
复制代码

2. 文件——另存为——保存类型(所有文件)——文件名(size1.c)——编码(ANSI)——保存。
    在编码选项中可以看到记事本的默认编码方式为 ANSI 。


3. 文件——另存为——保存类型(所有文件)——文件名(size2.c)——编码(UTF-8)——保存。


4. 分别编译连接两个文件,然后运行。

222.png (67.76 KB, 下载次数: 290)

222.png
回复 使用道具 举报
杜工 来自手机 高级黑马 2014-8-10 11:29:09
13#
gb2312,简体中文编码,一个汉字相当于两个英文字符。所以2个字节。
回复 使用道具 举报
我记得, .C文件和.CPP文件也是不同的,建议楼主在.CPP文件下面试一试。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马