zxcbcv 发表于 2020-9-2 14:30:54

S1E22

#include <stdio.h>

#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;
}


检擦需要跳过几个字节:

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;
}
https://xxx.ilovefishc.com/forum/201605/30/113637ihmcp88m1h1491y8.png

昨非 发表于 2020-9-2 14:43:37

编码不同大小也不一样
https://s1.ax1x.com/2020/08/26/dR3xqH.png
你看看是不是因为这

巴巴鲁 发表于 2020-9-2 14:48:27

汉字占4个字节,指针占8个字节,跳过2个

sunrise085 发表于 2020-9-2 14:57:32

因为在while循环的第一行已经跳过一个字节了
ch = *target++;
这一句target自加过一次,所以后面判断为中文之后,再跳过两个字节就可以了
页: [1]
查看完整版本: S1E22