with - char array c



Strstr Char-Array innerhalb des Struct-Arrays (4)

Als Antwort hinzugefügt wie von mic_e vorgeschlagen

Angenommen, Sie versuchen anhand der Eingabe eines Benutzers nach einem Spielernamen zu suchen, haben Sie die Argumente von strstr in umgekehrter Reihenfolge. Beachten Sie auch, dass strstr Groß- und Kleinschreibung unterscheidet.

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

Ich habe eine Struktur definiert als;

struct player {

    int no, age;

    char name[20];  

} players[10];

Array wird aus Datei gefüllt. Was ich versuche zu tun ist, nehmen Sie die Eingabe von Benutzer, fügen Sie Eingabe in Char-Array, senden Sie es an die Suche (char lookup []) -Funktion und strstr Name Feld in einer Schleife.

EDIT: Tut mir leid, dass ich die Bestellung korrigiert habe. Ich versuche in einer Schleife zu stricken.

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

aber p ist immer null. Wie kann ich das machen?

Danke im Voraus.

Bearbeiten - Code hinzugefügt ...

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

Das sollte funktionieren.

Ich denke, Sie haben das Problem mit dem Lesen von Dateien, die das Datenfeld füllt.

Bitte stellen Sie sicher, dass die Daten, die Sie in die Struktur eingegeben haben, Ok sind.

Und strstr gibt die Adresse des ersten Vorkommens von string1 in string2 zurück, wobei strstr (string2, string1);


So was:

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

fgets speichert das \n und beendet dann die Eingabe.

Nehmen wir an, ein Spielername ist "user" , players[i].name ist gleich "user\n" während a "user" .

Die Rückgabe von strstr ist also immer NULL .

Versuchen Sie es stattdessen:

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

ODER, entfernen Sie das \n nachdem Sie die Eingabe aus der Datei mit 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++;
} 




strstr