鱼C论坛

 找回密码
 立即注册
查看: 2530|回复: 12

[已解决]指针法实现库函数strlen的问题请教

[复制链接]
发表于 2020-2-7 17:49:41 | 显示全部楼层    本楼为最佳答案   
本帖最后由 unseenupon 于 2020-2-9 00:41 编辑

第四行代码: char (*p)[100]=&str;
这里换成普通的字符指针 char *p=str;
楼主用二级指针 p 指向这个一维数组,在下面解引用的时候超出数组范围了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-7 18:57:56 | 显示全部楼层
大裤衩子 发表于 2020-2-7 18:00
按照视频里的说法,普通指针,就是直接指向了数组里首个元素地址,*(p)[100]=str这种办法不就是直接指向 ...

也对,忘了这是指向整个数组的地址了...
这样的话把char (*p)[100]=&str 改为 char(*p)[1]=&str
程序也能运行

#include <stdio.h>
int main()
{
    char str[100]={0};
    char (*p)[1]=&str;
    int i=0;
    printf("insrt a seq:");
    scanf("%s", str);

    for(i; *(*p+i)!='\0'; i++);

    printf("seqlen:%d\n",i);
    return 0;

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

使用道具 举报

发表于 2020-2-8 16:45:20 | 显示全部楼层
大裤衩子 发表于 2020-2-7 20:24
再追问一句,char (*p)[1]=&str; 改成char (*p)[100]=&str;就错了,为这[]里一定要是1呢?

我刚刚试了一下,发现不是下标的问题。。而是解引用的位置我调整过了。。
我在下面的代码中解引用是是这样写的; *(*p+i) ; 直接将二级指针p原封不动地解了一层,这样其实也就相当于用了一个简单的指针变量
所以这样的话任意符合规范的数字都可以填在[]里面,我刚试了一下也确实是这样的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-1 21:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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