找回密码
 立即注册
查看: 366|回复: 7

指针数组的一个简单例子执行出错了

[复制链接]
  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-04-29 09:29:30

31

主题

148

回帖

982

积分

高级会员

积分
982
发表于 2024-10-11 15:53:44 | 显示全部楼层 |阅读模式
本帖最后由 yzhkpli 于 2024-10-11 16:00 编辑

#include <stdio.h>
#include <stdlib.h>

//自定义的计算字符串的长度
int my_strlen(char *string){
        int length=0;
        while(*string!='\0'){
                length++;
                string++;
        }
        return length;
}

int find_char(char **strings,char value);

int main(void){
        char *name="Bill Gates";
        int length=strlen(name);

        char *strs[5];
        char *s1="A string";
        char *s2="Another";
        char *s3="Third";
        char *s4="Last";
        char *s5="";
        strs[0]=s1;
        strs[1]=s2;
        strs[2]=s3;
        strs[3]=s4;
        strs[4]=s5;

        printf("name points to string length :%d\n",length);//10        
        printf("name points to string length :%s,%d\n",name,my_strlen(name));
        
        //int x1=find_char(strs,'K');
        //printf("x1:%d",x1);
        
        if(find_char(strs,'K')){
                printf("找到了\n");
        }else{
                printf("找不到\n");
        }
        
        system("pause");
        return 0;
}


int find_char(char **strings,char value){
        
        char *string;
        while((string=*strings++)!=NULL){
                while(*string++!='\0'){
                        if(*string==value){
                                return 1;
                        }
                        //string++;
                }
        }
        return 0;
}

这段代码的诡异之处在于,如果删掉与指针数组无关的,也就是仅仅下面的部分


#include <stdio.h>
#include <stdlib.h>

int find_char(char **strings,char value);

int main(void){

        char *strs[5];
        char *s1="A string";
        char *s2="Another";
        char *s3="Third";
        char *s4="Last";
        char *s5="";
        strs[0]=s1;
        strs[1]=s2;
        strs[2]=s3;
        strs[3]=s4;
        strs[4]=s5;
        
        //int x1=find_char(strs,'K');
        //printf("x1:%d",x1);
        
        if(find_char(strs,'t')){
                printf("找到了\n");
        }else{
                printf("找不到\n");
        }
        
        system("pause");
        return 0;
}

int find_char(char **strings,char value){
        
        char *string;
        while((string=*strings++)!=NULL){
                while(*string++!='\0'){
                        if(*string==value){
                                return 1;
                        }
                        //string++;
                }
        }
        return 0;
}


完全执行正常!!!

求教到底是哪里导致了问题。


回复

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-04-29 09:29:30

31

主题

148

回帖

982

积分

高级会员

积分
982
发表于 2024-10-11 16:01:02 | 显示全部楼层
帖子编辑不了。
再贴一下。上面的能用的程序的循环有问题。修正后的是

#include <stdio.h>
#include <stdlib.h>

//自定义的计算字符串的长度
int my_strlen(char *string){
        int length=0;
        while(*string!='\0'){
                length++;
                string++;
        }
        return length;
}

int find_char(char **strings,char value);

int main(void){
        char *name="Bill Gates";
        int length=strlen(name);

        char *strs[5];
        char *s1="A string";
        char *s2="Another";
        char *s3="Third";
        char *s4="Last";
        char *s5="";
        strs[0]=s1;
        strs[1]=s2;
        strs[2]=s3;
        strs[3]=s4;
        strs[4]=s5;

        printf("name points to string length :%d\n",length);//10       
        printf("name points to string length :%s,%d\n",name,my_strlen(name));
       
        //int x1=find_char(strs,'K');
        //printf("x1:%d",x1);
       
        if(find_char(strs,'K')){
                printf("找到了\n");
        }else{
                printf("找不到\n");
        }
       
        system("pause");
        return 0;
}

int find_char(char **strings,char value){       
        char *string;
        while((string=*strings)!=NULL){
                while(*string!='\0'){
                        if(*string==value){
                                return 1;
                        }
                        string++;
                }
        }
        return 0;
}

点评

[attachimg]59558[/attachimg]  详情 回复 发表于 2024-10-12 09:13
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:423
  • 最近打卡:2025-05-02 07:55:56
已绑定手机

19

主题

3190

回帖

4870

积分

论坛元老

积分
4870
发表于 2024-10-11 16:14:22 | 显示全部楼层
这个不是标准C语言程序吗
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-04-29 09:29:30

31

主题

148

回帖

982

积分

高级会员

积分
982
发表于 2024-10-11 16:32:33 | 显示全部楼层
so*** 发表于 2024-10-11 16:14
这个不是标准C语言程序吗

就是标准的c啊。不是c51
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:391
  • 最近打卡:2025-04-30 00:26:42

0

主题

336

回帖

1490

积分

金牌会员

积分
1490
发表于 2024-10-11 19:55:33 | 显示全部楼层
strlen函数要引用string.h头文件,而且它的返回值是unsigned int
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:38
  • 最近打卡:2025-04-30 14:38:57

25

主题

977

回帖

3599

积分

超级版主

积分
3599
发表于 2024-10-12 09:13:04 | 显示全部楼层
yzhk*** 发表于 2024-10-11 16:01
帖子编辑不了。
再贴一下。上面的能用的程序的循环有问题。修正后的是

截图202410120913007993.jpg
回复 支持 1 反对 0

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-04-29 09:29:30

31

主题

148

回帖

982

积分

高级会员

积分
982
发表于 2024-10-14 11:42:24 | 显示全部楼层

先谢谢了。底子太薄。好多东西,前几天写了又陌生了。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:143
  • 最近打卡:2025-04-29 09:29:30

31

主题

148

回帖

982

积分

高级会员

积分
982
发表于 2024-10-14 11:54:58 | 显示全部楼层
while((string=*strings++)!=NULL){
前面的一个=貌似应该是俩=,即==,
程序没写注释,现在我也忘记思路了。

再次感谢热心坛友指正。
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 09:10 , Processed in 0.144445 second(s), 100 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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