数组和指针求助!
#include <stdio.h>
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;
}
用小甲鱼这个代码知道在数组中存放中文要四个字节
但是为什么
#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 += 1;
}
length++;
}
printf("您总共输入了 %d 个字符!\n", length - 1);
return 0;
}
这个程序中只要target+=1就可以跳过剩余的四个数组下标,不用target+=4呢 ? char *target是一个指向字符串的指针,它每次跳1在底层 是跳过当前所指字符串啦 ExiaGN001 发表于 2022-7-2 20:29
char *target是一个指向字符串的指针,它每次跳1在底层 是跳过当前所指字符串啦
如果target+1可以跳过当前所指向的中文字符,
那为什么在target++后可以跳过当前英文字符,
而如果要跳过中文字符的话要在target++之后再加一个target+=1才能跳到下一个字符?
参考我发的最后一段代码
gandixiwang 发表于 2022-7-2 21:51
如果target+1可以跳过当前所指向的中文字符,
那为什么在target++后可以跳过当前英文字符,
而如果要跳 ...
因为汉字占2字符? ExiaGN001 发表于 2022-7-3 06:48
因为汉字占2字符?
额,但是参考我发的第一段代码运算的结果,为什么中文字符占了数组的四个字节?
如果一个中文字符是占两字符的话,不是应该只占两个字节才对嘛? gandixiwang 发表于 2022-7-3 16:15
额,但是参考我发的第一段代码运算的结果,为什么中文字符占了数组的四个字节?
如果一个中文字符是占两 ...
不同编码系统是不一样的,中文可能占2字节,可能占3字节,要根据你自己用的环境去测试出来。至少你这算的4字节是错的,“中” 这是字符串,不是字符,字符串以 ‘\0’ 结尾,光 ‘\0’ 就占掉了1字节,总共才4字节,怎么可能一个中文字符4字节
页:
[1]