指针法实现库函数strlen的问题请教
我的代码如下,结果为啥不对呢,#include <stdio.h>
int main(){
char str;
char (*p)=&str;
printf("insrt a seq:");
fgets(str,100,stdin);
int i;
while(*(p++) != '\0'){
i++;
}
printf("seqlen:%d\n",i);
return 0;
}
本帖最后由 大裤衩子 于 2020-2-7 16:59 编辑
{:10_243:} 代码改了,第10行加上了*,结果还是不对{:10_247:}
#include <stdio.h>
int main(){
char str;
char (*p)=&str;
printf("insrt a seq:");
fgets(str,100,stdin);
int i;
while(*(*p++) != '\0'){
i++;
}
printf("seqlen:%d\n",i);
return 0;
}
本帖最后由 unseenupon 于 2020-2-9 00:41 编辑
第四行代码: char (*p)=&str;
这里换成普通的字符指针 char *p=str;
楼主用二级指针 p 指向这个一维数组,在下面解引用的时候超出数组范围了 你的i是不是没有初始化 unseenupon 发表于 2020-2-7 17:49
第四行代码: char (*p)=&str;
这里换成普通的字符指针 char *p=str;
然后我把fget函数换成了scanf; ...
按照视频里的说法,普通指针,就是直接指向了数组里首个元素地址,*(p)=str这种办法不就是直接指向整个数组的地址么?{:10_257:} 最后的魁拔 发表于 2020-2-7 17:59
你的i是不是没有初始化
刚刚找到问题,就是i没有初始化引起的{:10_275:} 大裤衩子 发表于 2020-2-7 18:08
刚刚找到问题,就是i没有初始化引起的
i初始化还是不对,逻辑这么简单怎么结果就是不对{:10_266:}
#include <stdio.h>
#define MAX 100
int main(){
char str;
char (*p)=&str;
printf("insert a seq:");
fgets(str,MAX,stdin);
int i=0;
while(*(*p++) != '\0'){
i++;
}
printf("seqlen:%d\n",i-1); // "减一:fgets会读入\n"
return 0;
} 你输入abc的时候加上\0试一下。 大裤衩子 发表于 2020-2-7 18:20
i初始化还是不对,逻辑这么简单怎么结果就是不对
还是改成了,直接指向数组元素首地址,就没有问题了,{:10_291:}#include <stdio.h>
#define MAX 100
int main(){
char str;
//char (*p)=&str;
char *p=str;
printf("insert a seq:");
fgets(str,MAX,stdin);
int i=0;
while(*p++ != '\0'){
i++;
}
printf("seqlen:%d\n",i-1); // "减一:fgets会读入\n"
return 0;
}
大裤衩子 发表于 2020-2-7 18:00
按照视频里的说法,普通指针,就是直接指向了数组里首个元素地址,*(p)=str这种办法不就是直接指向 ...
也对,忘了这是指向整个数组的地址了...
这样的话把char (*p)=&str 改为 char(*p)=&str
程序也能运行
#include <stdio.h>
int main()
{
char str={0};
char (*p)=&str;
int i=0;
printf("insrt a seq:");
scanf("%s", str);
for(i; *(*p+i)!='\0'; i++);
printf("seqlen:%d\n",i);
return 0;
} unseenupon 发表于 2020-2-7 18:57
也对,忘了这是指向整个数组的地址了...
这样的话把char (*p)=&str 改为 char(*p)=&str
程序也 ...
再追问一句,char (*p)=&str; 改成char (*p)=&str;就错了,为这[]里一定要是1呢? 大裤衩子 发表于 2020-2-7 20:24
再追问一句,char (*p)=&str; 改成char (*p)=&str;就错了,为这[]里一定要是1呢?
我刚刚试了一下,发现不是下标的问题。。而是解引用的位置我调整过了。。
我在下面的代码中解引用是是这样写的; *(*p+i) ; 直接将二级指针p原封不动地解了一层,这样其实也就相当于用了一个简单的指针变量
所以这样的话任意符合规范的数字都可以填在[]里面,我刚试了一下也确实是这样的
页:
[1]