求助。可以记数汉字的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;
} 仔细观察了下,
我好像把
*target++ 和 target+2 混为一谈了。 但是还是不能打消我的疑虑,除非一个汉字是三个字节,不然是没法正常运行的吧 SaltY7967 发表于 2022-7-16 11:40
但是还是不能打消我的疑虑,除非一个汉字是三个字节,不然是没法正常运行的吧
对,这个程序假设一个中文字符是三个字节
如果你的系统上一个中文字符不是三个字节,这个程序就会给出错误的结果
本帖最后由 jackz007 于 2022-7-16 12:31 编辑
每个汉字占用的字节数取决于编码,linux 操作系统采用 utf-8 编码,每个汉字占用3个字节,中文简体版的 windows 采用 gb2312 编码,每个汉字占用 2 个字节。
页:
[1]