【问题标题】:Main function's arguments, cant understand this!主函数的参数,无法理解!
【发布时间】:2023-03-25 06:49:01
【问题描述】:

当我给出参数 print 时,为什么我的代码会返回“Not a valid command”?

int main(int argc, char *argv[]) {

    printf("Argument 2 er %s\n", argv[1]);

    if(argv[1] == "print") {
        printf("Print kommando kalt");
    } else if(argv[1] == "random") {
        printf("Random kommando kalt");
    } else if(argv[1] == "replace") {
        printf("Replace kommando kalt");
    } else if(argv[1] == "remove") {
        printf("Remove kommando kalt");
    } else if(argv[1] == "len") {
        printf("øem kommando kalt");
    } else {
        printf("Ingen gyldig kommando\n");
    }
}

【问题讨论】:

    标签: c function main


    【解决方案1】:

    您无法使用 == 比较 C 字符串。这仅进行指针比较。您需要改用strcmp

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

    【讨论】:

      【解决方案2】:

      因为你不能像 C 那样比较字符串。

      你需要使用:

      if(strcmp(argv[1], "print") == 0)
        printf("Print kommando kalt\n");
      

      等等。

      另外,请确保您不要访问argv[1],除非它确实存在且有效;如果您的程序在没有参数的情况下被调用,它将为 NULL。您可以使用argc 的值来确定您有多少个参数。

      【讨论】:

      • @Oli: argv[argc](main 开头的值)被标准保证为 NULL
      【解决方案3】:

      因为argv[1]char*:类似于 0xDEADBEEF
      而“print”的行为就好像它是 another char*: 类似于 0xBADF00D

      和 0xDEADBEEF != 0xBADF00D

      你想使用strcmp()http://linux.die.net/man/3/strcmp

      【讨论】:

      • 哈...为 DEADBEEF 参考 +1
      • 如果您使用了 0xDECAFBAD,我会给它一个 +1。 :-)
      猜你喜欢
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多