fanzongsao 发表于 2017-8-6 11:05:32

课后习题S1E22动手第一题,小甲鱼老师的中文字符占3个字节,而我的占俩字节

本帖最后由 fanzongsao 于 2017-8-6 15:39 编辑

是不是因为我用的是windows?

代码如下:

#include <stdio.h>

int main()
{
      char str[] = "中";
      int length, i;

      length = sizeof(str) / sizeof(str);

      printf("length of str: %d\n", length);

      for (i = 0; i < length; i++)
      {
                printf("str[%d] = %d\n", i,str);
      }

      return 0;
}

小甲鱼老师的运行结果是

我的运行结果少了一个字节,如下
length of str: 3
str = -42
str = -48
str = 0

丶忘却的年少o 发表于 2017-8-6 11:13:06

本帖最后由 丶忘却的年少o 于 2017-8-6 11:15 编辑

嗯,是的,我在linux里是3,在window下就是2,就像甲鱼哥说的在不同系统里占用的是不一样的,从开课就有说int/float/double类型也是这样在不同操作系统会不一样。

不过你这个程序代码好像不太对,那个for循环里的printf
printf("str[%d] = %d\n", i, str);
应该改成str,不然变量没用上,而且数组没意义

ba21 发表于 2017-8-6 11:46:15

和文本编码有关
GB2312:两个字节
Unicode:两个字节
UTF-8:可变,一般为3个字节

GB2312在Windows上用的多

UTF-8在其他系统上(Linux这些)比较常见

测字符串的长度是用strlen,sizeof是返回总共占用了多少空间

fanzongsao 发表于 2017-8-6 15:37:27

丶忘却的年少o 发表于 2017-8-6 11:13
嗯,是的,我在linux里是3,在window下就是2,就像甲鱼哥说的在不同系统里占用的是不一样的,从开课就有说i ...

谢谢{:10_303:}
页: [1]
查看完整版本: 课后习题S1E22动手第一题,小甲鱼老师的中文字符占3个字节,而我的占俩字节