2014-04-01 50 views
0

有人可以告訴我爲什麼p總是NULL,即使strstr正確找到(在搜索功能)?我從文件中填充結構數組。對不起,重新發帖this other question但他們都沒有幫助。strstr字符數組結構數組與用戶輸入內

#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); 
} 
+0

返回類型搜索的'()''是void' –

+0

肯定的,因爲我沒有回來。 – sudomakemeasandwich

+0

那你爲什麼說'爲什麼這個搜索函數返回p爲NULL'? –

回答

1

fgets存儲\n後停止服用輸入。

因此,假設一個球員的名字是"user"players[i].name將等於"user\n"a"user"

因此返回strstr總是NULL

試試這個:

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

OR,除去\n通過fgets採取從輸入文件之後:

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++; 
} 
+0

但我需要在a中找到球員[i] .name。 p = strstr(a,players [i]); – sudomakemeasandwich

+0

@ user2237922現在看。 –

+0

@ user2237922現在可以嗎? –