在C语言中使用argv?

10

我需要为我的C程序添加命令行参数,这是一个任务要求。我之前在C++中使用过argc/argv而没有遇到问题,但是我不确定C风格的字符串是否会影响它的功能。以下是我的main函数的开头:

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] 是 "-e",我仍然得到了 "错误:不正确的用法..." 输出。请帮助我,谢谢!

6个回答

18

这行代码

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

比较的是指针而不是字符串。使用strcmp函数代替:

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

1
哈哈。在我写完答案的时间里,已经有6个人给出了和我一样的答案。 - user120587
好的,这绝对解决了问题。感谢您纠正了这个错误,我对C语言非常陌生! - Joe

7

变更:

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

to

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

并且需要包含string.h头文件。


5

请查看getopt()和相关函数;它们将使您的生活更轻松。


3

你不能这样比较c-strings。使用strcmp(参考这里)。

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


2

在C语言中,你不能使用==这种方式比较字符串。这只是在比较argv[1]和你的字面量的地址,而它们几乎肯定是不同的。

应该使用strcmp代替,例如:

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

1

主函数的原型表明您正在处理 char* 指针。在 C 中,没有运算符重载;因此,两个 char* 之间的 == 将测试它们是否指向相同的位置。这不是情况,而且很少是情况。请使用来自 <string.h>strcmp 函数(即使它指向 C++ 站点,该函数的参考仍然有效):

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接