2016-03-31 10 views
0

Also ich ein c-Programm erstellen, die eine Abfrage-Datei mit Befehlen zur Ausführung auf Tabellen gefüllt liest. So habe ich:fscanf liest mehrere Strings

char command[100]; 
while(1) 
{ 
    fscanf(query, "%s", command); 
    x=strcmp(command, "select"); 
    //continue with checking for other commands etc. 
    //if the command is stop then the loop breaks 
} 

Meine Frage ist, wenn ich fscanf ersten Mal aufrufen, ich weiß, es wird den Befehl in der Befehls Array zu speichern. Aber sollte ich die Zeichenfolge "leer" machen, oder null als eine bessere Möglichkeit, es zu setzen? Ich bin mir nicht sicher, ob es notwendig ist, wenn man mit strcmp arbeitet oder Arrays mit fscanf überschreibt. Vielen Dank!

+3

Was sollten Sie tun, ist der Rückgabewert von fscanf testen; alles andere ist ein Rezept für Überraschungen, wie zum Beispiel nicht endende Schleifen. – Jens

+0

Sie müssen sich nicht darum kümmern, das Array zu löschen. Aber es gibt einige andere Dinge, über die man sich Sorgen machen muss, mit 'fscanf' im Allgemeinen und mit'% s' im Besonderen. 'fgets' wäre wahrscheinlich eine bessere Wahl. –

+2

Vielleicht 'char Befehl [100] = {" "}; while (fscanf (query, "% 99s", Befehl) == 1) {...} 'sorgt für eine sicherere Codierung. – chux

Antwort

0

Sie sollten sich keine Gedanken über etwas machen, das überschrieben wird. Sie sollten nur (immer) sich darum kümmern, es vor der Verwendung seines Wertes zu initialisieren. Denn sonst ist es undefiniertes Verhalten.

Noch wichtiger, sollten Sie immer den Rückgabewert von Funktionen im Speicher überprüfen. Sie können sich nie darauf verlassen, dass das funktionieren würde. Denn nach einiger Zeit würden Sie Segmentation Fault aus heiterem Himmel erhalten und nicht wissen, wie man es repariert.

Falls Sie nicht wissen, wie:

int check; 

check = fscanf(query, "%s", command); 
if(check == EOF) 
    perror("fscanf");