gandixiwang 发表于 2022-7-2 19:25:32

数组和指针求助!


#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呢        ?

ExiaGN001 发表于 2022-7-2 20:29:18

char *target是一个指向字符串的指针,它每次跳1在底层 是跳过当前所指字符串啦

gandixiwang 发表于 2022-7-2 21:51:34

ExiaGN001 发表于 2022-7-2 20:29
char *target是一个指向字符串的指针,它每次跳1在底层 是跳过当前所指字符串啦

如果target+1可以跳过当前所指向的中文字符,
那为什么在target++后可以跳过当前英文字符,
而如果要跳过中文字符的话要在target++之后再加一个target+=1才能跳到下一个字符?
参考我发的最后一段代码

ExiaGN001 发表于 2022-7-3 06:48:45

gandixiwang 发表于 2022-7-2 21:51
如果target+1可以跳过当前所指向的中文字符,
那为什么在target++后可以跳过当前英文字符,
而如果要跳 ...

因为汉字占2字符?

gandixiwang 发表于 2022-7-3 16:15:44

ExiaGN001 发表于 2022-7-3 06:48
因为汉字占2字符?

额,但是参考我发的第一段代码运算的结果,为什么中文字符占了数组的四个字节?
如果一个中文字符是占两字符的话,不是应该只占两个字节才对嘛?

风车呼呼呼 发表于 2022-7-3 16:26:29

gandixiwang 发表于 2022-7-3 16:15
额,但是参考我发的第一段代码运算的结果,为什么中文字符占了数组的四个字节?
如果一个中文字符是占两 ...

不同编码系统是不一样的,中文可能占2字节,可能占3字节,要根据你自己用的环境去测试出来。至少你这算的4字节是错的,“中” 这是字符串,不是字符,字符串以 ‘\0’ 结尾,光 ‘\0’ 就占掉了1字节,总共才4字节,怎么可能一个中文字符4字节
页: [1]
查看完整版本: 数组和指针求助!