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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 云霄之上 中级黑马   /  2014-7-14 22:35  /  1814 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

如果我在一个字符串中存储一些汉字  再用strlen函数计算这个字符串中的字符数 那么一个汉字代表的是一个字符呢  还是三个字符呢?

8 个回复

倒序浏览
在C语言中使用strlen函数来求长度时,汉字会当做三个字符来计算。
回复 使用道具 举报
不同的编译器貌似结果不一样,在MJ老师的视频中,即xcode中显示结果是3,我在win7的visual c++6.0下显示的结果是2.
  1. #include <stdio.h>
  2. #include <string>

  3. void main()
  4. {
  5.         char *p1,*p2;
  6.         p1 = "我很好";
  7.         int a = sizeof("我很好");
  8.         int b = strlen(p1);
  9.         printf("%d,%d\n",a,b);

  10.         p2 = "我";
  11.         int c = sizeof("我");
  12.         int d = strlen(p2);
  13.         printf("%d,%d\n",c,d);
  14. }
复制代码

运行结果是:
7,6
3,2
回复 使用道具 举报
3个字符
回复 使用道具 举报
温天恩 发表于 2014-7-14 22:55
不同的编译器貌似结果不一样,在MJ老师的视频中,即xcode中显示结果是3,我在win7的visual c++6.0下显示的 ...

这应该跟编译器没关系,是编码决定的。xcode应该默认是utf8编码,用1-4字节表示文字,汉字恰好处于3字节的位置。而中文windows下汉字默认是gbk编码,gbk是双字节编码。
回复 使用道具 举报
是的, 一个汉字代表三个字符
回复 使用道具 举报
小海 中级黑马 2014-7-15 17:19:31
7#
是三个字符,你可以测试一下的
回复 使用道具 举报
fantacyleo 发表于 2014-7-15 09:27
这应该跟编译器没关系,是编码决定的。xcode应该默认是utf8编码,用1-4字节表示文字,汉字恰好处于3字节 ...

长进了,以前不知道呢,谢谢了!
回复 使用道具 举报
vc中一个汉字是两个字符
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马