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]='\0'; 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将等于"user\n"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]='\0'; //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: %s\n", 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:%s\n",players[x].name,inputFromUser) char *p = strstr(players[x].name, inputFromUser); 

我希望这清楚你的怀疑。

应该工作。

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

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

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