2016-04-24 11 views
1

Ich möchte Argument lesen und vergleichen sie dann mit einem Charakter:prüfen, ob Programm Argument ein einzelnes Zeichen entspricht

int main (int argc, char *const argv[]) { 
    if (argv[1][1] == 'c') { 
     client(); 
    } 
    else if (argv[1][1] == 's') { 
     server(); 
    } 

    return 0; 
} 

Es funktioniert, wenn ich tippe cc oder dd, es funktioniert auch, wenn ich ccttttt eingeben. Es nimmt nur das zweite Zeichen, aber ich möchte es nur funktionieren, wenn ich c eintippe.

+1

'strcmp (argv [1], "c") = = 0' –

Antwort

1

Nur argv ändern [1] [1] bis argv [1] [0] und erinnert in C/C++ alle Arrays beginnen in '0'

1

argv[1] ist ein Zeiger auf das erste Befehlszeilenargument.

argv[1][1] ist das zweite Zeichen dieses Arguments.

Das erste Zeichen ist argv[1][0]. (Aber zuerst prüfen, ob argc >= 2, das heißt, dass es tatsächlich ein Befehlszeilenargument.)

Dies ist natürlich nur überprüft ein einzelnes Zeichen, so dass es nicht zwischen "c" und "cthulhu" unterscheidet. Wenn Sie so mit dem Argument umgehen wollen, ist das in Ordnung, aber Sie sollten vielleicht einen anderen Ansatz in Betracht ziehen.

+0

Nicht mal zwischen "c" und "call";) –

+0

danke, und was würdest du vorschlagen, wenn ich die ganze Saite vergleichen möchte? zum Beispiel würde ich gerne überprüfen, ob ich 'Hilfe' oder etwas anderes eingegeben – mereth

+0

@mereth: 'strcmp()' –

Verwandte Themen