yzhkpli 发表于 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;
      char *s1="A string";
      char *s2="Another";
      char *s3="Third";
      char *s4="Last";
      char *s5="";
      strs=s1;
      strs=s2;
      strs=s3;
      strs=s4;
      strs=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;
      char *s1="A string";
      char *s2="Another";
      char *s3="Third";
      char *s4="Last";
      char *s5="";
      strs=s1;
      strs=s2;
      strs=s3;
      strs=s4;
      strs=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;
}


完全执行正常!!!{:sweat:}

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


yzhkpli 发表于 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;
        char *s1="A string";
        char *s2="Another";
        char *s3="Third";
        char *s4="Last";
        char *s5="";
        strs=s1;
        strs=s2;
        strs=s3;
        strs=s4;
        strs=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;
}

soma 发表于 2024-10-11 16:14:22

这个不是标准C语言程序吗

yzhkpli 发表于 2024-10-11 16:32:33

soma 发表于 2024-10-11 16:14
这个不是标准C语言程序吗

就是标准的c啊。不是c51

xxxevery 发表于 2024-10-11 19:55:33

strlen函数要引用string.h头文件,而且它的返回值是unsigned int

zhp 发表于 2024-10-12 09:13:04

yzhkpli 发表于 2024-10-11 16:01
帖子编辑不了。
再贴一下。上面的能用的程序的循环有问题。修正后的是




yzhkpli 发表于 2024-10-14 11:42:24

zhp 发表于 2024-10-12 09:13


先谢谢了。底子太薄。好多东西,前几天写了又陌生了。{:sweat:}

yzhkpli 发表于 2024-10-14 11:54:58

while((string=*strings++)!=NULL){
前面的一个=貌似应该是俩=,即==,
程序没写注释,现在我也忘记思路了。{:4_199:}{:4_199:}{:4_199:}{:4_198:}{:4_184:}

再次感谢热心坛友指正。
页: [1]
查看完整版本: 指针数组的一个简单例子执行出错了