argc argv проблемы

Подскажите, пожалуйста, почему этот код не работает? Он компилируется. Когда я набираю расшифровку в качестве аргумента argv [1] в командной строке, он по-прежнему дает мне вывод else. т.е. argv [1] не выполняется, хотя должно быть. Это работа, поэтому игнорируйте другой код.

 if ((argv[1] == "decrypt"))
      { 
      printf("Decrypting...\n");
        c = getc(fp1);
        if (c != EOF)
          { 
          fread(inputbuffer, sizeof(char), 50 , fp1);   
            printf("%s", inputbuffer);
            /*while(inputbuffer[i]!=EOF)
            {
            fputc((inputbuffer[i] / 2) - 5, fp2);
            }*/
          } 
      }

      else {printf("argv not working");}

person adohertyd    schedule 22.12.2011    source источник
comment
используйте strcmp или C ++ с std :: string   -  person Abyx    schedule 22.12.2011
comment
Это не имеет ничего общего с argc / argv и полностью связано с тем, как строки обрабатываются в C.   -  person abelenky    schedule 22.12.2011


Ответы (1)


Вам нужно использовать strcmp() для сравнения строк:

if ((strcmp(argv[1], "decrypt") == 0)

Подробнее:

Вы сравниваете два адреса памяти для разных строк, которые хранятся в разных местах. По сути, это выглядит так:

if(0x00403064 == 0x002D316A) // Two memory locations
{
    printf("Yes, equal");
}
person Tim Cooper    schedule 22.12.2011
comment
Я изменил его на strcmp, и теперь программа вылетает! Он не печатает Decrypting ... так что это все еще argv, вызывающий проблему EDIT: исправлено, мое плохое, ваше решение было идеальным, спасибо - person adohertyd; 22.12.2011
comment
@adohertyd: в вашем коде есть другие ошибки, такие как возможная строка, не оканчивающаяся нулем, которую вы пытаетесь распечатать. Также убедитесь, что argc не меньше 2. - person Tim Cooper; 22.12.2011