首页 文章

是否必须编写int main(int argc,char * argv []),不能使用其他名称而不是argc和* argv []?

提问于
浏览
4

我在这里遇到一些麻烦,在项目选项本身中给Visual Studio提供命令行参数(在'Configuration Properties' - >'Debugging'中) .

我写的这个“ int main(int argc) " after the " int main(int main_i) ”没用 . 在MS visual studio属性页面的项目命令行参数中,我不确定应该写什么 . 我只想传递一个整数来指定文件是读取还是写入,因此只需要int argc . 我不需要char *argv[] . 我在命令行参数文本框中尝试了一些值,但它在执行时没有到达exe文件,它显示了我根本没有输入的内容 .

你能给我一个简单的例子来说明我需要在MSVS C Property Pages的命令行参数空间输入什么吗?我根本找不到任何关于如何将命令行参数提供给MSVS的示例 .

我也不明白为什么我需要重建整个项目,即使我刚刚修改了命令行参数值?

6 回答

  • 4

    和其他提到的一样,这只是一个方便的问题,Kernighan和Ritchie在第一个C版本中使用了这些参数 .

    你可以自由使用任何东西 .

    这是一个简单的例子:

    #include <iostream>
    
    int main(int arglen, char *args[])
    {
            std::cout << "Running: " << *args << std::endl;
        while (--arglen > 0)
            std::cout << *++args << std::endl;
        return 0;
    }
    

    我使用Visual C 2010 Express . 如果这样做,可以按Alt F7以显示项目属性,转到配置属性>调试并在 Command Arguments 中键入命令行参数 .

    而已 .

  • 9

    如果要读取命令行参数的值,则必须使用 char *argv[] . 否则你可以放弃它 .

    如果您只想要一个整数来区分两件事,那么您有一种方法可以做到这一点 . 只需传递一个命令行参数,并且不需要 char *argv[] . 现在只传递一个命令行参数,然后 argc 的值是 2 ,即可执行文件的名称命令行参数 .

    如果你没有传递命令行参数,那么它的值只是 1 ,即可执行文件的名称 .

  • 5

    如果希望程序理解单个整数命令行参数,则仍需使用 argcargv . 像这样的东西应该这样做:

    int main(int argc, char *argv[]) {
    
        if (argc < 2) {
            fprintf(stderr, "Need a command line argument.\n");
            exit(1);
        }
    
        int arg = atoi(argv[1]);
        // now you have an integer
        // do whatever with it...
    }
    

    C标准要求 main 函数具有特定的参数集 . 其中一个允许的组合是 (int, char *[]) . 您可以根据需要为参数命名,但它们几乎总是被称为 argcargv .

  • 1

    这些名称只是一个完善的约定,你可以使用你想要的任何名称(虽然它可能引起一些人的注意),但是,我只看到了以指定的顺序使用了两个参数的代码 .

    在ANSI之前的日子里,它可以简单地拥有 int main() ,它仍然是......但是这些天通常都会提供 argc argv .

    您不能只提供其中一个参数 .

  • 1

    变量名称仅适用于编译器 . 它们将转换为二进制图像中的地址 . 您可以为main传递最多3个参数 .

    这是我试过的 -

    int main(int i, char* a[], char* e[])
    

    如您所见,名称不是正常名称 . 第一个参数是命令行参数的数量,第二个参数是实际的参数数组,第三个是环境变量数组 .

    事实上,主要可以采取任何数量的论点,但其余的,在第三个之后将是无效的 . 这仍然会编译 -

    int main(int i, char* a[], char* e[], char* j[])
    

    只是为了好玩,你甚至可以这样做 -

    int main(int i, float a, float b, float c, float d, float e)
    
  • 4

    即使是简单的_2379825也是允许的,你仍然可以访问这些参数 .

    int main()
    {
        int nArgCount = __argc;
        char** pArgs= __argv;
    
        printf("Argument Count: %d\n", nArgCount-1);
        printf("Arguments:");
    
        for(int nIndex = 1; nIndex<nArgCount; ++nIndex)
            printf("%s, ", pArgs[nIndex]);
    }
    

    您还可以使用 GetCommandLine 函数来访问命令行 . 没有/使用 main 的论点的重要方面是你仍然可以 access command line arguments in any function .

相关问题