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
编码不同大小也不一样
https://s1.ax1x.com/2020/08/26/dR3xqH.png
你看看是不是因为这 汉字占4个字节,指针占8个字节,跳过2个 因为在while循环的第一行已经跳过一个字节了
ch = *target++;
这一句target自加过一次,所以后面判断为中文之后,再跳过两个字节就可以了
页:
[1]