鱼C论坛

 找回密码
 立即注册
查看: 1615|回复: 5

[已解决]数组和指针求助!

[复制链接]
发表于 2022-7-2 19:25:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
无标题.png
#include <stdio.h>

int main()
{
        char str[] = "中";
        int length, i;
        
        length = sizeof(str) / sizeof(str[0]);
        
        printf("length of str: %d\n", length);

        
        for (i = 0; i < length; i++)
        {
                printf("str[%d] = %d\n", i, str[i]);
        }
        
        return 0;
}
用小甲鱼这个代码知道在数组中存放中文要四个字节
但是为什么
无标题.png
#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;
}
这个程序中只要target+=1就可以跳过剩余的四个数组下标,不用target+=4呢        ?
最佳答案
2022-7-3 16:26:29
gandixiwang 发表于 2022-7-3 16:15
额,但是参考我发的第一段代码运算的结果,为什么中文字符占了数组的四个字节?
如果一个中文字符是占两 ...

不同编码系统是不一样的,中文可能占2字节,可能占3字节,要根据你自己用的环境去测试出来。至少你这算的4字节是错的,“中” 这是字符串,不是字符,字符串以 ‘\0’ 结尾,光 ‘\0’ 就占掉了1字节,总共才4字节,怎么可能一个中文字符4字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-2 20:29:18 | 显示全部楼层
char *target是一个指向字符串的指针,它每次跳1在底层 是跳过当前所指字符串
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-2 21:51:34 | 显示全部楼层
ExiaGN001 发表于 2022-7-2 20:29
char *target是一个指向字符串的指针,它每次跳1在底层 是跳过当前所指字符串啦

如果target+1可以跳过当前所指向的中文字符,
那为什么在target++后可以跳过当前英文字符,
而如果要跳过中文字符的话要在target++之后再加一个target+=1才能跳到下一个字符?
参考我发的最后一段代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-3 06:48:45 | 显示全部楼层
gandixiwang 发表于 2022-7-2 21:51
如果target+1可以跳过当前所指向的中文字符,
那为什么在target++后可以跳过当前英文字符,
而如果要跳 ...

因为汉字占2字符?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-3 16:15:44 | 显示全部楼层
ExiaGN001 发表于 2022-7-3 06:48
因为汉字占2字符?

额,但是参考我发的第一段代码运算的结果,为什么中文字符占了数组的四个字节?
如果一个中文字符是占两字符的话,不是应该只占两个字节才对嘛?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-3 16:26:29 | 显示全部楼层    本楼为最佳答案   
gandixiwang 发表于 2022-7-3 16:15
额,但是参考我发的第一段代码运算的结果,为什么中文字符占了数组的四个字节?
如果一个中文字符是占两 ...

不同编码系统是不一样的,中文可能占2字节,可能占3字节,要根据你自己用的环境去测试出来。至少你这算的4字节是错的,“中” 这是字符串,不是字符,字符串以 ‘\0’ 结尾,光 ‘\0’ 就占掉了1字节,总共才4字节,怎么可能一个中文字符4字节
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-29 09:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表