鱼C论坛

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

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

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

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

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

x
本帖最后由 Juniorboy 于 2020-4-30 16:57 编辑
#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 += 2;
                }
                length++;
        }

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

        return 0;
}

一个汉字占4个字节,为什么target+2?判断是不是汉字知道用(int)ch < 0,但是这个+2不+4没明白。
最佳答案
2020-4-30 20:16:54
两个中文字符,一共 +8 ?   +9 ?
是 一个字符3个字节
两个字符6个字节
再加一个 '\0'
#include <stdio.h>
#include <string.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;
}
批注 2020-04-30 164238.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我什么也没说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

发现一个 bug
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

0不是也站了位置了吗,请问为什么不是+3呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

是 +3 呀

+2 是因为上面已经 ++过了
如果是中文,那就再补一个 2
一共是 +3
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

哈哈哈,可能您理解错了,我的意思是既然占了4个位置,那就得加4呀,'\0'也需要站一个地方的啊,前面加了一个,下面加了两个,还缺一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

一共 +3

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-30 20:16:54 | 显示全部楼层    本楼为最佳答案   
两个中文字符,一共 +8 ?   +9 ?
是 一个字符3个字节
两个字符6个字节
再加一个 '\0'
#include <stdio.h>
#include <string.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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

在 C 板块就是 人造人 的天下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

因为那道题的数组还没结束,后面还跟有其他字符,实验中文字符只有一个字符已经结束了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

^_^
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-21 08:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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