Используя argv в C? - PullRequest
       14

Используя argv в C?

6 голосов
/ 20 февраля 2010

Для назначения мне необходимо иметь аргументы командной строки для моей программы на Си. Я использовал argc / argv раньше (в C ++) без проблем, но я не уверен, влияют ли строки стиля 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;
    }
  }

Итак, я называю свою программу как «program.exe -e myargstuff», но получаю вывод «Ошибка: неправильное использование ...», хотя мой printf () сообщает мне, что argv [1] есть » е». Некоторая помощь, пожалуйста? Спасибо!

Ответы [ 6 ]

15 голосов
/ 20 февраля 2010

Линия

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

сравнивает указатели, а не строки. Вместо этого используйте функцию strcmp :

if(strcmp(argv[1],"-e")==0){
6 голосов
/ 20 февраля 2010

Изменение:

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

до

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

и включают string.h.

5 голосов
/ 20 февраля 2010

Проверить getopt() и связанные с ними функции; это сделает вашу жизнь намного проще.

3 голосов
/ 20 февраля 2010

Вы не можете сравнивать c-строки таким образом. Используйте strcmp (ссылка здесь ).

Поскольку c-строки на самом деле являются указателями, оператор == сравнивает адрес первого символа, который в этом случае никогда не будет равен.

2 голосов
/ 20 февраля 2010

Вы не можете использовать == для сравнения таких строк в C. Это просто сравнение адресов argv [1] и вашего литерала, которые в значительной степени гарантированно будут разными.

Вместо этого используйте strcmp. например:

if (!strcmp("-e", argv[1])) {
1 голос
/ 20 февраля 2010

Прототип основной функции говорит, что вы имеете дело с char* указателями. В C нет перегрузки операторов; следовательно, == между двумя char* проверит, указывают ли они на одно и то же место . Это не так, и это совсем не так. Используйте функцию strcmp (ссылка на функцию действительна, даже если она указывает на сайт C ++) из <string.h>:

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