2011-12-22 81 views
0

有人可以告訴我爲什麼這段代碼不起作用嗎?它編譯。當我在命令行中鍵入解密爲argv [1]參數時,它仍然給我else輸出。即,argv [1]即使應該是不滿意的。這是一項正在進行的工作,從而忽略了其他的代碼argc argv問題

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");} 
+0

使用STRCMP或C++使用的std :: string – Abyx 2011-12-22 15:33:15

+0

這有什麼好做的argc/argv的,和一切與字符串如何在C – abelenky 2011-12-22 15:34:27

回答

11

您需要使用strcmp()比較字符串:

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

More detail

你是比較有哪兩種內存不同字符串的地址,它們存儲在不同的位置。這樣做實際上是這樣的:

if(0x00403064 == 0x002D316A) // Two memory locations 
{ 
    printf("Yes, equal"); 
} 
+0

我處理已將其更改爲strcmp,現在程序崩潰!它不是打印「Decrypting ...」,所以它仍然是引起問題的argv編輯:修復它我的不好你的解決方案是完美的謝謝 – adohertyd 2011-12-22 15:42:37

+0

@adohertyd:你的代碼有其他的錯誤,比如可能的非空字符串你正在嘗試打印。還要確保'argc'至少是2. – 2011-12-22 15:43:49

+0

顯示新的代碼? – 2011-12-22 15:45:11