Аргументы основной функции, не могу этого понять! - PullRequest
1 голос
/ 17 сентября 2010

Почему мой код возвращает мне "Недопустимая команда", когда я даю аргумент print?

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

    printf("Argument 2 er %s\n", argv[1]);

    if(argv[1] == "print") {
        printf("Print kommando kalt");
    } else if(argv[1] == "random") {
        printf("Random kommando kalt");
    } else if(argv[1] == "replace") {
        printf("Replace kommando kalt");
    } else if(argv[1] == "remove") {
        printf("Remove kommando kalt");
    } else if(argv[1] == "len") {
        printf("øem kommando kalt");
    } else {
        printf("Ingen gyldig kommando\n");
    }
}

Ответы [ 3 ]

13 голосов
/ 17 сентября 2010

Вы не можете сравнивать строки C, используя ==. Это делает только сравнение указателей. Вам нужно использовать strcmp вместо:

if (strcmp(argv[1], "print") == 0) …
8 голосов
/ 17 сентября 2010

Поскольку вы не можете сравнивать строки, подобные этим, в C.

Вам нужно использовать:

if(strcmp(argv[1], "print") == 0)
  printf("Print kommando kalt\n");

И т. Д.t получить доступ к argv[1], не убедившись, что он действительно там и действителен;если ваша программа вызывается без аргументов, она будет NULL.Вы можете использовать значение argc, чтобы определить, сколько аргументов вы получили.

2 голосов
/ 17 сентября 2010

Потому что argv[1] - это char*: что-то вроде 0xDEADBEEF
и "print" ведет себя так, как будто это другой char*: что-то вроде 0xBADF00D

и 0xDEADBEEF! = 0xBADF00D

Вы хотите использовать strcmp() (http://linux.die.net/man/3/strcmp)

...