2016-04-18 17 views
-2

Also arbeite ich an einem Projekt zum Erstellen und Verwenden einer Shell. Eine Sache, die getan werden muss, ist "| execute | -p | prompt | sollte dem Benutzer erlauben, eine benutzerdefinierte Eingabeaufforderung zu wählen. Ansonsten sollte der Standardwert" 257sh> "sein. Ich habe meinen Code geschrieben, um dies aber egal zu tun Es geht weiter in die else-Anweisung. Nach einigen Experimenten weiß ich, dass meine argv[1] == "-p" Zeile das Problem verursacht, denn ohne sie funktioniert der Code. Die Sache ist, dass wenn ich argv [1] drucke, "-p" (vorausgesetzt, das ist, was ich Eingang). hier ist meine Shell-Funktion.Vergleichen von C-Strings vs String-Zeiger für die Gleichheit

void shellLoop(char *n) 
{ 
    char *line; 
    char **args; 
    int status; 
    char name = n; 

    do{ 
     printf("%s>", n); 
     line = sysReadLine(); 
     args = splitLine(line); 
     status = execute(args); 

     free(line); 
     free(args); 
    }while(status); 
} 

Und hier ist meine Hauptfunktion

int main(int argc, char *argv[]) 
{ 
    if(argc == 3 && argv[1] == "-p"){ 
     shellLoop(argv[2]); 
    } 
    else{ 
     shellLoop("257sh"); 
    } 

    return EXIT_SUCCESS; 
} 
+3

'argv [1] ==" -p "': benutze 'strcmp' anstelle von' == 'in C. – BLUEPIXY

Antwort

2

Wenn Sie das tun argv[1] == "-p" y oder vergleichen Sie zwei Zeiger, und zwei Zeiger, die nie gleich sein werden.

Um Zeichenfolgen in C zu vergleichen, verwenden Sie die strcmp Funktion: strcmp(argv[1], "-p") == 0.

1

Sie können auch strncmp (char * str1, char * str2, int n) verwenden, um die ersten n Bytes zweier Strings zu vergleichen.

+0

" Auch "bedeutet, dass die gezeigte Methode tatsächlich funktioniert - was nicht der Fall ist. Und da beide Strings garantiert 'nul'-terminiert sind, ist' strncpy' nicht notwendig. – Olaf

Verwandte Themen