在C中使用argv?

时间:2010-02-20 02:07:18

标签: c argv

对于作业,我需要为我的C程序提供命令行参数。我之前使用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”,但我得到的是“Error:Incorrect Usage ...”输出,即使我的printf()告诉我argv [1]是“ - E”。请帮忙吗?谢谢!

6 个答案:

答案 0 :(得分:15)

该行

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

比较指针,而不是字符串。请改用strcmp功能:

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

答案 1 :(得分:6)

变化:

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

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

并加入string.h

答案 2 :(得分:5)

查看getopt()及相关功能;它会让你的生活更轻松。

答案 3 :(得分:3)

你无法比较那样的c字符串。使用strcmp(引用here)。

因为c字符串实际上是指针,所以==运算符会比较在这种情况下永远不会相等的第一个字符的地址。

答案 4 :(得分:2)

您无法使用==来比较C中的字符串。这只是比较argv [1]和您的文字的地址,这几乎可以保证不同。

请改用strcmp。例如:

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

答案 5 :(得分:1)

主函数的原型说你正在处理char*指针。在C中,没有运算符重载;因此,两个==之间的char*将测试他们是否指向同一个地方。情况并非如此,很少是这种情况。从<string.h>使用strcmp(函数的引用即使它指向C ++站点也是有效的)函数:

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