9

对于作业,我需要为我的 C 程序提供命令行参数。我之前(在 C++ 中)使用过 argc/argv 没有问题,但我不确定 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”,但我得到了“错误:错误用法...”输出,即使我的 printf() 告诉我 argv[1] 是“-e”。请帮忙?谢谢!

4

6 回答 6

16

线

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

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

if(strcmp(argv[1],"-e")==0){
于 2010-02-20T02:09:35.177 回答
7

改变:

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

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

并包括string.h.

于 2010-02-20T02:10:26.873 回答
5

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

于 2010-02-20T02:10:41.650 回答
3

你不能像那样比较 c 字符串。使用 strcmp(参考这里)。

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

于 2010-02-20T02:10:06.067 回答
2

你不能用==C 来比较像这样的字符串。那只是比较 argv[1] 和你的文字的地址,这几乎可以保证是不同的。

改为使用strcmp。例如:

if (!strcmp("-e", argv[1])) {
于 2010-02-20T02:10:22.900 回答
1

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

strcmp(argv[1], "-e") == 0
于 2010-02-20T02:10:58.530 回答