SaltY7967 发表于 2022-7-16 11:29:25

求助。可以记数汉字的strlen 程序的问题

本帖最后由 SaltY7967 于 2022-7-16 12:56 编辑

#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++;
      }
//round1: ch = *target, *target = *(target + 3);那么round2开始时: ch= *target +3   但是一个汉字是占四个字节啊,那么这个ch不是应该在上一个汉字的最后一个字节上吗。这个程序跑起来为什么没问题呢?

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

      return 0;
}

SaltY7967 发表于 2022-7-16 11:35:00

仔细观察了下,
我好像把
*target++ 和 target+2 混为一谈了。

SaltY7967 发表于 2022-7-16 11:40:00

但是还是不能打消我的疑虑,除非一个汉字是三个字节,不然是没法正常运行的吧

人造人 发表于 2022-7-16 11:59:04

SaltY7967 发表于 2022-7-16 11:40
但是还是不能打消我的疑虑,除非一个汉字是三个字节,不然是没法正常运行的吧

对,这个程序假设一个中文字符是三个字节

人造人 发表于 2022-7-16 12:00:18

如果你的系统上一个中文字符不是三个字节,这个程序就会给出错误的结果

jackz007 发表于 2022-7-16 12:29:59

本帖最后由 jackz007 于 2022-7-16 12:31 编辑

      每个汉字占用的字节数取决于编码,linux 操作系统采用 utf-8 编码,每个汉字占用3个字节,中文简体版的 windows 采用 gb2312 编码,每个汉字占用 2 个字节。
页: [1]
查看完整版本: 求助。可以记数汉字的strlen 程序的问题