2011-12-22 80 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