c/c++语言开发共享struct array中的strstr char数组

我有一个结构定义为;

struct player { int no, age; char name[20]; } players[10]; 

数组从文件中填充。 我尝试做的是,从用户获取输入,将输入添加到char数组,将其发送到循环中的search(char lookup [])函数和strstr name字段。

EDİT:对不起,我更正了订单。 我正试图在一个循环中strstr。

 char *p = strstr(players[x].name, inputFromUser); 

但是p总是为空。 我怎样才能做到这一点?

提前致谢。

编辑 – 代码添加…

 #include  #include  #include  #include  struct player { int no, age; char name[20]; } players[20]; void fillstruct(char *); void search(char []); int main(int argc, char *argv[]) { int arg; int c; int d; int i=0; char a[100]; char *filename = NULL; while((arg=getopt(argc, argv, "f:"))!=-1) { switch(arg) { case 'f': filename = optarg; fillstruct(filename); break; default: break; } } while((c=fgetc(stdin))!=EOF) { if(c!=10) { a[i]=c; i++; } else { a[i]=''; search(a); i=0; } } return 0; } void search(char a[]) { int i=0; int col; int found=0; char *p =NULL; while((i<20)&&(found==0)) { p = strstr(a, players[i].name); if(p) { col = pa; printf("nPlayer '%s' found in '%s'.. Found index: %d", a, players[i].name, col); found=1; } else { printf("np=%sa=%s player[%d].name=%s", p, a, i, players[i].name); } i++; } } void fillstruct(char *name) { FILE *fp; char line[100]; int i=0; fp = fopen(name, "r"); if(fp==NULL) { exit(1); } while(fgets(line, 100, fp)!=NULL) { players[i].no=i; strcpy(players[i].name, line); fprintf(stdout, "nplayer=%s", players[i].name); players[i].age=20; i++; } fclose(fp); } 

    fgets存储n然后停止输入。

    因此假设玩家名称是"user"players[i].name将等于"usern"a"user"

    所以strstr返回总是NULL

    试试这个:

     p = strstr(players[i].name,a); 

    或者,在通过fgets从文件输入后删除n

     while(fgets(line, 100, fp)!=NULL) { players[i].no=i; strcpy(players[i].name, line); players[i].name[strlen(players[i].name)-1]=''; //add this line fprintf(stdout, "nplayer=%s", players[i].name); players[i].age=20; i++; } 

    添加为mic_e建议的答案

    假设您尝试使用来自用户的输入搜索玩家名称,则您以相反的顺序拥有strstr的参数。 另请注意,strstr区分大小写。

    char * p = strstr(players [x] .name,inputFromUser);

    像这样:

     char *p = strstr(players[x].name, inputFromUser); 

    它应该工作,如果你的输入错误就会失败,让我简单地说

     int main() { char *ret; char mystr[]="stack"; char str[]="This is stack over flow string"; ret = strstr(str, mystr); printf("The substring is: %sn", ret); return(0); } 

    输出是

     The substring is: stack over flow string 

    这意味着

    此函数返回指向mystr指定的任何整个字符序列的str中第一个出现的指针,如果str不存在该序列,则返回空指针。

    它区分大小写的function意味着如果尝试搜索就像

     char mystr[]="Stack";//Note here first char is capital 

    而你的输出就像

     The substring is: (null) 

    您只需打印内容并validation其是否正确,即可检查您身边的输入和目标字符串。

     printf("str1:%s str2:%sn",players[x].name,inputFromUser) char *p = strstr(players[x].name, inputFromUser); 

    我希望这清楚你的怀疑。

    应该工作。

    我认为你有文件读取问题填充数据数组。

    请确保您填入结构的数据是好的。

    并且strstr返回string2中string1的第一次出现的地址,其中,strstr(string2,string1);

      以上就是c/c++开发分享struct array中的strstr char数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/523320.html

      (0)
      上一篇 2020年12月11日
      下一篇 2020年12月11日

      精彩推荐