鱼C论坛

 找回密码
 立即注册
查看: 1113|回复: 11

[已解决]指针课后作业22之模仿strlen函数

[复制链接]
发表于 2020-4-30 16:56:42 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Juniorboy 于 2020-4-30 16:57 编辑
  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.         printf("请输入一个字符串:");
  10.         fgets(str, MAX, stdin);

  11.         while (1)
  12.         {
  13.                 ch = *target++;
  14.                 if (ch == '\0')
  15.                 {
  16.                         break;
  17.                 }
  18.                 if ((int)ch < 0)
  19.                 {
  20.                         target += 2;
  21.                 }
  22.                 length++;
  23.         }

  24.         printf("您总共输入了 %d 个字符!\n", length - 1);

  25.         return 0;
  26. }
复制代码


一个汉字占4个字节,为什么target+2?判断是不是汉字知道用(int)ch < 0,但是这个+2不+4没明白。
最佳答案
2020-4-30 20:16:54
两个中文字符,一共 +8 ?   +9 ?
是 一个字符3个字节
两个字符6个字节
再加一个 '\0'

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         char str[] = "中文";
  6.         int length, i;

  7.         length = sizeof(str) / sizeof(str[0]);

  8.         printf("length of str: %d\n", length);

  9.         for (i = 0; i < length; i++)
  10.         {
  11.                 printf("str[%d] = %d\n", i, str[i]);
  12.         }

  13.         return 0;
  14. }
复制代码
批注 2020-04-30 164238.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-4-30 17:01:29 | 显示全部楼层
本帖最后由 永恒的蓝色梦想 于 2020-4-30 17:02 编辑

我什么也没说
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 18:21:50 | 显示全部楼层
图片上输出的是 4,实际应该是 3,因为还有一个 '\0'
实际应该是 +3
+2 是因为上面已经 ++过了
如果是中文,那就再补一个 2
一共是 +3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 18:23:37 | 显示全部楼层
@小甲鱼

发现一个 bug
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 19:27:00 | 显示全部楼层
人造人 发表于 2020-4-30 18:21
图片上输出的是 4,实际应该是 3,因为还有一个 '\0'
实际应该是 +3
+2 是因为上面已经 ++过了

0不是也站了位置了吗,请问为什么不是+3呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 19:46:46 | 显示全部楼层
Juniorboy 发表于 2020-4-30 19:27
0不是也站了位置了吗,请问为什么不是+3呢

是 +3 呀

+2 是因为上面已经 ++过了
如果是中文,那就再补一个 2
一共是 +3
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-30 20:00:50 | 显示全部楼层
人造人 发表于 2020-4-30 19:46
是 +3 呀

+2 是因为上面已经 ++过了

哈哈哈,可能您理解错了,我的意思是既然占了4个位置,那就得加4呀,'\0'也需要站一个地方的啊,前面加了一个,下面加了两个,还缺一个
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 20:14:24 | 显示全部楼层
Juniorboy 发表于 2020-4-30 20:00
哈哈哈,可能您理解错了,我的意思是既然占了4个位置,那就得加4呀,'\0'也需要站一个地方的啊,前面加了 ...

一共 +3

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 20:16:54 | 显示全部楼层    本楼为最佳答案   
两个中文字符,一共 +8 ?   +9 ?
是 一个字符3个字节
两个字符6个字节
再加一个 '\0'

  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.         char str[] = "中文";
  6.         int length, i;

  7.         length = sizeof(str) / sizeof(str[0]);

  8.         printf("length of str: %d\n", length);

  9.         for (i = 0; i < length; i++)
  10.         {
  11.                 printf("str[%d] = %d\n", i, str[i]);
  12.         }

  13.         return 0;
  14. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 20:27:08 From FishC Mobile | 显示全部楼层
永恒的蓝色梦想 发表于 2020-4-30 17:01
我什么也没说

在 C 板块就是 人造人 的天下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 21:07:45 | 显示全部楼层
Juniorboy 发表于 2020-4-30 19:27
0不是也站了位置了吗,请问为什么不是+3呢

因为那道题的数组还没结束,后面还跟有其他字符,实验中文字符只有一个字符已经结束了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 21:15:04 | 显示全部楼层
_2_ 发表于 2020-4-30 20:27
在 C 板块就是 人造人 的天下

^_^
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-29 09:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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