本帖最后由 jackz007 于 2022-10-17 18:47 编辑
Linux 采用 "UTF-8" 编码,每个西文字符占用 1 个字节,每个中文字符占用 3 个字节,Windows 采用 "GBK" 编码,每个西文字符占用 1 个字节,每个中文字符占用 2 个字节,可见,这两个系统每个汉字占用的字节数是不同的。
这个代码只适合在 Linux 系统下使用,楼主一定是在 Windows 环境下吧?在 Windows 下需要修改这一句 if ((int)ch < 0)
{
target ++; // 在不同系统下只要修改这一句就可以了,当前状态适合 Windows 系统。
}
修改后的代码#include <stdio.h>
#define MAX 1024
int main()
{
char str[MAX];
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 += 1;
}
length++;
}
printf("您总共输入了 %d 个字符!\n", length - 1);
return 0;
}
编译、运行实况:D:\[00.Exerciese.2022]\C>g++ -o x x.c
D:\[00.Exerciese.2022]\C>x
请输入一个字符串:中国人民是爱好和平的人民
您总共输入了 12 个字符!
D:\[00.Exerciese.2022]\C>
|