我有一个结构定义为;
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