2012-03-27 22 views
1

Ich habe ein Programm, das ein einzelnes Argument von der Befehlszeile einliest und bestimmte Operationen an ihm ausführt. Ich benutze argv und argc. Wenn ich kein Argument an das Programm weitergebe, segmentiert es. Ich habe versucht, zu überprüfen, ob argc nicht ein bestimmter Wert ist und dann den Wert ausdruckt, aber es immer noch segfaults. Hier ist der Code in Frage. Beachten Sie, dass es wie erwartet funktioniert, wenn Sie ein einzelnes Argument übergeben. Hier ist der Code in Frage:Segmentation Fault mit Argv

int main(int argc, char *argv[]) 
{ 

int numTimes = atoi(argv[1]);   //converts content of argv[1] into integer 

if(argc != 2) 
{ 
     printf("Enter a valid integer."); 
} 
+1

'std :: vector Argumente (argv, argv + argc);' –

+0

@MooingDuck: Ich sehe nicht, wie dies das Problem löst. –

+0

@larsmans: Es macht alles einfacher, und (für einige Implementierungen) verhindert UB und könnte seinen Fehler offensichtlich und leicht zu finden gemacht haben. –

Antwort

6

Sie müssen argcüberprüfen, bevor Sie versuchen, dieses Argument zuzugreifen. Verschieben Sie einfach den argc Test zu einem früheren Zeitpunkt, bevor Sie atoi(argv[1]) anrufen.

2

Sie müssen die Prüfung vor versuchen, auf die Argumente zuzugreifen.

5

Überprüfen Sie einfach die Anzahl der Argumente, bevor Sie versuchen, auf ein bestimmtes Element zuzugreifen. Etwas wie folgt aus:

int main(int argc, char *argv[]) 
{ 

    if(argc < 2) 
    { 
     printf("Enter a valid integer."); 
     return 0; 
    } 

    int numTimes = atoi(argv[1]); // now we're sure to have at least 1 argument passed 

    // ... 
} 
+0

Ich habe das versucht und es funktioniert immer noch nicht. Hier ist eine vereinfachte Version: # include int main (int argc, char * argv []) { int input = atoi (argv [1]); // konvertiert Inhalt von argv [1] in Ganzzahl if (argc! = 2) { printf ("Gib eine gültige Ganzzahl ein."); } printf ("% d", Eingabe); } Edit: Entschuldigung für die abgeschlagene Antwort; Ich gewöhne mich immer noch an diese Seite. – wafflesausage

+0

Sie müssen zuerst nach der korrekten Anzahl von Elementen (argc) suchen; DANN versuchen Sie, die ganze Zahl zu lesen. – Mario

+0

Entschuldigung, Sie haben Recht. Ich habe zwar genau das gemacht, was du gesagt hast, aber ich habe etwas verpasst. Vielen Dank für Ihre Geduld. – wafflesausage