2010-02-20 14 views
6

Do przypisania, wymagane są argumenty wiersza poleceń dla mojego programu C. Użyłem argc/argv przed (w C++) bez problemu, ale nie jestem pewien, czy ciągi w stylu C wpływają na to, jak to działa. Oto początek mój główny:Użycie argv w C?

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

    if(argc>1){ 
    printf("0 is %s, 1 is %s\n",argv[0],argv[1]); 
    if(argv[1]=="-e"){ 
     // Do some stuff with argv[2] 
     system("PAUSE"); 
    } 
    else{ 
     printf("Error: Incorrect usage - first argument must be -e"); 
     return 0; 
    } 
    } 

Więc wzywam mój program jako „program.exe -e myargstuff” ale ja otrzymuję „Błąd: Nieprawidłowe użytkowanie ...” wyjście, choć moim printf() mówi mi, że argv [1] to "-e". Potrzebuję pomocy? Dzięki!

+0

@Joe: Wygląda na nowy StackOverflow; możesz rozważyć zaznaczenie pola obok dowolnej odpowiedzi, którą uważasz najlepiej za odpowiedź na pytanie. – jgottula

+0

Dzięki za cynk! – Joe

Odpowiedz

14

Linia

if(argv[1]=="-e"){ 

porównuje wskaźniki, a nie ciągi. Użyj funkcji strcmp zamiast:

if(strcmp(argv[1],"-e")==0){ 
+1

Haha. 6 odpowiedzi tak jak moje w czasie, w którym zajęło mi napisanie odpowiedzi. –

+0

Cóż, to absolutnie to zrobiło. Dziękuję za poprawienie tego, jestem nowy w C! – Joe

3

Nie można porównywać c-sznurki jak to. Użyj polecenia strcmp (odniesienie here).

Ponieważ łańcuchy c są w rzeczywistości wskaźnikami, operator == porównuje adres pierwszego znaku, który nigdy nie będzie równy w tym przypadku.

2

Nie możesz użyć ==, aby porównać ciągi takie jak w C. To tylko porównanie adresów argv [1] i twojego dosłownego, które są zapewne różne.

Zamiast tego należy użyć strcmp. np:

if (!strcmp("-e", argv[1])) { 
5

Zmiana:

if(argv[1]=="-e"){ 

do

if(strcmp(argv[1], "-e") == 0){ 

i obejmują string.h.

5

Zapoznaj się z getopt() i funkcji pokrewnych; to znacznie ułatwi ci życie.

1

Prototyp głównej funkcji mówi, że masz do czynienia z wskaźnikami char*. W C nie ma przeciążenia operatora; dlatego == między dwoma char* będzie testować, czy wskazują to samo miejsce. Tak nie jest i rzadko się tak zdarza. Użyj strcmp (odniesienie do funkcji jest ważne, mimo że wskazuje na C++ stronie) funkcji z <string.h>:

strcmp(argv[1], "-e") == 0