gpt4 book ai didi

c - 带有用户输入的结构数组内的 strstr char 数组

转载 作者:行者123 更新时间:2023-11-30 15:35:50 25 4
gpt4 key购买 nike

有人可以告诉我为什么即使 strstr 正确找到(在搜索函数中),p 也总是 NULL?我正在从文件填充结构数组。抱歉重新发布this other question但他们都没有得到帮助。

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

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 = p-a;
printf("\nPlayer '%s' found in '%s'.. Found index: %d", a, players[i].name, col);
found=1;
}
else
{
printf("\np=%s a=%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“用户”

因此 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++;
}

关于c - 带有用户输入的结构数组内的 strstr char 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22789962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com