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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张海龙重新起航 于 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. }
复制代码


8 个回复

倒序浏览
本帖最后由 程浩 于 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:26
藤椅
这跟汉字编码有关,GBK编码一个汉字占两个字节,UTF-8编码一个汉字占三个字节,x-code应该属于UTF-8编码,所以在x-code下一个汉字占三个字节。
回复 使用道具 举报
沙洲冷 发表于 2014-4-6 10:32
这跟汉字编码有关,GBK编码一个汉字占两个字节,UTF-8编码一个汉字占三个字节,x-code应该属于UTF-8编码, ...

汉字是2个字符,你说的字节问题确实跟编码有关
回复 使用道具 举报
程浩 发表于 2014-4-6 10:29
汉字是两个啊,你strlen这个char数组,算的是包括\0的长度  2+1=3
你可以用sizeof来算,就是2个了 ...

strlen不算\0吧?如果把汉字改为字母的话,结果为1呀
回复 使用道具 举报
张海龙重新起航 发表于 2014-4-6 10:36
strlen不算\0吧?如果把汉字改为字母的话,结果为1呀

嗯,我之前说的有问题,我打开电脑也试了下,确实像你说的
回复 使用道具 举报
沙洲冷 发表于 2014-4-6 10:32
这跟汉字编码有关,GBK编码一个汉字占两个字节,UTF-8编码一个汉字占三个字节,x-code应该属于UTF-8编码, ...

此为正解
回复 使用道具 举报
汉字应该是两个字符,我觉得应该包含了结尾的字符 ,所以造成了3个字符的问题。。。
回复 使用道具 举报
本帖最后由 墨迹的可乐 于 2014-4-6 15:22 编辑

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

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

2. gb2312

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

所以这个跟字符集的编码是有关系的。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马