weijun_zhang 发表于 2021-4-21 21:39:17

S1E22 动动手第0题课后答疑

本帖最后由 weijun_zhang 于 2021-4-21 21:45 编辑

老师的课后习题说汉字占4个字节,都是负数。
可是我运行了,只有3个字节,而且前面两个为负数,最后一个为0啊?啥情况?    为何老师的答案,检测到为负数,指针地址+2,而不是+4或者+3呢?
#include <stdio.h>

int main()
{
      char str[]="中";
      int length=0,i;
      length = sizeof(str) / sizeof(str);
      
      printf("length=%d\n",length);
      printf("%d",length);

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

      return 0;
}

运行结果如下:
length=3
3str=-42
str=-48
str=0

yuxijian2020 发表于 2021-4-21 21:41:54

最后的是 字符串结束符 '\0'

人造人 发表于 2021-4-21 21:43:53

你倒是把你的运行结果贴出来呀,你这样一点说服力都没有

weijun_zhang 发表于 2021-4-21 21:46:03

人造人 发表于 2021-4-21 21:43
你倒是把你的运行结果贴出来呀,你这样一点说服力都没有

你提醒的是,已更新,烦请帮忙解答下,感谢

人造人 发表于 2021-4-21 21:55:33

weijun_zhang 发表于 2021-4-21 21:46
你提醒的是,已更新,烦请帮忙解答下,感谢

嗯,还真是输出了3
一个中文字符占多少个字节是和文件的编码有关的

weijun_zhang 发表于 2021-4-21 22:23:03

人造人 发表于 2021-4-21 21:55
嗯,还真是输出了3
一个中文字符占多少个字节是和文件的编码有关的

什么意思?请问1.什么是文件的编码?   2.为何S=0,而不是负数?跟老师的说法及下发源代码22行不符   3.既然汉字是3个字符or4个字符,为何老师代码第24行是target+2?    懵了,盼复
#include <stdio.h>

#define MAX 1024

int main()
{
      char str;
      char *target = str;
      char ch;
      int length = 0;

      printf("请输入一个字符串:");
      fgets(str, MAX, stdin);

      while (1)
      {
                ch = *target++;
                if (ch == '\0')
                {
                        break;
                }
                if ((int)ch < 0)
                {
                        target += 2;
                }
                length++;
      }

      printf("您总共输入了 %d 个字符!\n", length - 1);

      return 0;
}

人造人 发表于 2021-4-21 22:53:04

weijun_zhang 发表于 2021-4-21 22:23
什么意思?请问1.什么是文件的编码?   2.为何S=0,而不是负数?跟老师的说法及下发源代码22行不符...

https://www.so.com/s?q=%E6%96%87%E4%BB%B6%E7%BC%96%E7%A0%81&src=srp&fr=360chrome_zoned&psid=96363bf3fe62a7c8adcdd4194184dab4
页: [1]
查看完整版本: S1E22 动动手第0题课后答疑