鱼C论坛

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

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

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

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

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

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

  2. int main()
  3. {
  4.         char str[] = "中";
  5.         int length, i;
  6.        
  7.         length = sizeof(str) / sizeof(str[0]);
  8.        
  9.         printf("length of str: %d\n", length);

  10.        
  11.         for (i = 0; i < length; i++)
  12.         {
  13.                 printf("str[%d] = %d\n", i, str[i]);
  14.         }
  15.        
  16.         return 0;
  17. }
复制代码

用小甲鱼这个代码知道在数组中存放中文要四个字节
但是为什么
无标题.png
  1. #include <stdio.h>

  2. #define MAX 1024

  3. int main()
  4. {
  5.         char str[MAX];//存放输入的字符
  6.         char *target = str;//遍历字符
  7.         char ch;//判断字符是否为中文
  8.         int length = 0;//统计字符数
  9.        
  10.         printf("请输入一个字符串:");
  11.         fgets(str, MAX, stdin);
  12.        
  13.         while (1)
  14.         {
  15.                 ch = *target++;
  16.                 if (ch == '\0')
  17.                 {
  18.                         break;
  19.                 }
  20.                 if ((int)ch < 0)
  21.                 {
  22.                         target += 1;
  23.                 }
  24.                 length++;
  25.         }
  26.        
  27.         printf("您总共输入了 %d 个字符!\n", length - 1);
  28.        
  29.         return 0;
  30. }
复制代码

这个程序中只要target+=1就可以跳过剩余的四个数组下标,不用target+=4呢        ?
最佳答案
2022-7-3 16:26:29
gandixiwang 发表于 2022-7-3 16:15
额,但是参考我发的第一段代码运算的结果,为什么中文字符占了数组的四个字节?
如果一个中文字符是占两 ...

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

使用道具 举报

发表于 2022-7-2 20:29:18 | 显示全部楼层
char *target是一个指向字符串的指针,它每次跳1在底层 是跳过当前所指字符串
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

因为汉字占2字符?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

额,但是参考我发的第一段代码运算的结果,为什么中文字符占了数组的四个字节?
如果一个中文字符是占两字符的话,不是应该只占两个字节才对嘛?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 05:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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