黑马程序员技术交流社区

标题: 一个汉字为什么是三个字符? [打印本页]

作者: 张海龙重新起航    时间: 2014-4-6 10:23
标题: 一个汉字为什么是三个字符?
本帖最后由 张海龙重新起航 于 2014-4-6 15:52 编辑
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5.     char name[]={"哈"};
  6.     int size=strlen(name);
  7.     printf("%d\n",size);
  8.     return 0;
  9. }
复制代码



作者: 程浩    时间: 2014-4-6 10:29
本帖最后由 程浩 于 2014-4-6 11:23 编辑

之前我说的的确是错的我测试过后:
  1. char name[]={""}  
  2. strlen(name): 0
  3. sizeof(name): 1

  4. char name[]={"ha"}
  5. strlen(name):2
  6. sizeof(name):3

  7. char name[]={"哈"}
  8. strlen(name):3
  9. sizeof(name):4
复制代码






作者: 沙洲冷    时间: 2014-4-6 10:32
这跟汉字编码有关,GBK编码一个汉字占两个字节,UTF-8编码一个汉字占三个字节,x-code应该属于UTF-8编码,所以在x-code下一个汉字占三个字节。
作者: 程浩    时间: 2014-4-6 10:35
沙洲冷 发表于 2014-4-6 10:32
这跟汉字编码有关,GBK编码一个汉字占两个字节,UTF-8编码一个汉字占三个字节,x-code应该属于UTF-8编码, ...

汉字是2个字符,你说的字节问题确实跟编码有关
作者: 张海龙重新起航    时间: 2014-4-6 10:36
程浩 发表于 2014-4-6 10:29
汉字是两个啊,你strlen这个char数组,算的是包括\0的长度  2+1=3
你可以用sizeof来算,就是2个了 ...

strlen不算\0吧?如果把汉字改为字母的话,结果为1呀
作者: 程浩    时间: 2014-4-6 11:24
张海龙重新起航 发表于 2014-4-6 10:36
strlen不算\0吧?如果把汉字改为字母的话,结果为1呀

嗯,我之前说的有问题,我打开电脑也试了下,确实像你说的
作者: 程浩    时间: 2014-4-6 11:36
沙洲冷 发表于 2014-4-6 10:32
这跟汉字编码有关,GBK编码一个汉字占两个字节,UTF-8编码一个汉字占三个字节,x-code应该属于UTF-8编码, ...

此为正解
作者: 星河鹭起    时间: 2014-4-6 11:50
汉字应该是两个字符,我觉得应该包含了结尾的字符 ,所以造成了3个字符的问题。。。
作者: 墨迹的可乐    时间: 2014-4-6 15:17
本帖最后由 墨迹的可乐 于 2014-4-6 15:22 编辑

这个问题的答案与系统所采用的字符编码方式有关:
例如输出 “strlen("汉字")”
1. utf-8

    如果系统采用的是utf-8,那么strlen("汉字")=6,即一个汉字占用3个字节。linux系统默认情况下采用的该种编码方式。

2. gb2312

    如果系统采用的是gb2312,则strlen("汉字")=4,即一个汉字占用2个字节。windows中文版采用的该种编码方式。

所以这个跟字符集的编码是有关系的。。





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