2016-04-01 11 views
1

Ich habe eine Datei bekommt namens "server.cfg" mit diesem Inhalt:Wie kann ich das zweite Wort jeder Zeile einer Datei in ein Zeichen speichern?

NAME SRV-01 
MAC 000543D3F4D8 

ich will "SRV-01" und "000543D3F4D8" bis 2 Zeichen speichern *. Ich habe so etwas wie dies:

FILE *fileS; 
char *name; 
char *mac; 
char *p; 

fileS=fopen("server.cfg","r"); 
while(fgets(line,1000,fileS)!=NULL){ 
    if(line[0]=="N"){ 
     p=strtok(line," "); 
     p=strtok(NULL," "); 
     name=p; 
     printf("Name: %s\n",name); 
    } 
    if(line[0]=="M"){ 
     p=strtok(line," "); 
     p=strtok(NULL," "); 
     mac=p; 
     printf("Name: %s Mac: %s\n",name,mac); 
    } 

Die Ausgabe lautet:

Name: SRV-01 
Name: 000543D3F4D8 Mac: 000543D3F4D8 

Aber ich würde diese Ausgabe wollen:

Name: SRV-01 
Name: SRV-01 Mac: 000543D3F4D8 

Ich weiß, dass das Problem auf die Zeiger verwandt ist, aber ich weiß nicht, wie ich das lösen könnte. Irgendein Vorschlag?

Danke

Antwort

1

Sie müssen mit der Speicherverwaltung arbeiten; strtok() gibt einen Zeiger in die Eingabezeichenfolge (line) zurück, die natürlich durch jede nachfolgende fgets() ersetzt wird.

Wenn Sie es haben, können Sie strdup() verwenden, um die Zeichenfolge und speichern zu duplizieren, die, oder einfach nur Arrays verwenden, anstatt Zeiger und strcpy() der Text in.

Auch da Sie ziemlich sicher sein, dass Ihre Linie gewonnen Beginne nicht mit sowohl'n' und 'm', die zweite if sollte eine else if sein. Auch Ihre Handhabung von Groß-/Kleinschreibung erscheint uns zweifelhaft ('n 'ungleich 'N').

+0

Danke Mann, es hat funktioniert! –

Verwandte Themen