我在这里遇到一些麻烦,在项目选项本身中给Visual Studio提供命令行参数(在'配置属性' - >'调试'中)。
在“int main(int argc)
”无效后我写了“int main(int main_i)
”。在MS visual studio属性页面的项目命令行参数中,我不确定应该写什么。我只想传递一个整数来指定文件是读取还是写入,因此只需要int argc。我不需要char *argv[]
。我在命令行参数文本框中尝试了一些值,但它在执行时没有到达exe文件,它显示了我根本没有输入的内容。
您能否仅仅向我提供一个我需要在MSVS C ++ Property Pages的命令行参数空间中输入的简单示例?我根本找不到任何关于如何将命令行参数提供给MSVS的示例。
我也不明白为什么我只需要修改命令行参数值就需要重建整个项目?
答案 0 :(得分:9)
如果您希望程序理解单个整数命令行参数,则仍然必须使用argc
和argv
。像这样的东西应该这样做:
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 *[])
。您可以随意命名参数,但它们几乎总是被称为argc
和argv
。
答案 1 :(得分:5)
名称只是一个完善的约定,你可以使用你想要的任何名称(虽然它可能会引起一些人的注意),但是,我只看到使用两者的代码指定顺序的参数。
在ANSI之前的日子里,可能只有int main()
,但它仍然是..但是这些天通常会提供argc
argv
。
您无法提供其中一个参数。
答案 2 :(得分:4)
变量名称仅适用于编译器。它们将转换为二进制图像中的地址。您可以为main传递最多3个参数。
这是我试过的 -
int main(int i, char* a[], char* e[])
如您所见,名称不是正常名称。 第一个参数是命令行参数的数量,第二个参数是实际的参数数组,第三个是环境变量数组。
实际上,main可以接受任意数量的参数,但其余的,在第三个之后将是无效的。这仍然可以编译 -
int main(int i, char* a[], char* e[], char* j[])
只是为了好玩,你甚至可以这样做 -
int main(int i, float a, float b, float c, float d, float e)
答案 3 :(得分:4)
即使是简单的main
也是允许的,你仍然可以访问这些参数。
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
参数的重要方面是你仍然可以访问任何函数中的命令行参数。
答案 4 :(得分:1)
与其他提到的一样,这只是一个方便的问题,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以显示项目属性,转到配置属性&gt;在Command Arguments
中调试并输入命令行参数。
就是这样。
答案 5 :(得分:1)
如果要读取命令行参数的值,则必须使用char *argv[]
。否则你可以放弃它。
如果你只想要一个整数来区分两件事,那么你有一种方法可以做到这一点。只需传递一个命令行参数,不要传递任何其他参数。现在您不需要char *argv[]
。现在只传递一个命令行参数,然后argc
的值为2
,即可执行文件的名称+命令行参数。
如果你没有传递命令行参数,那么它的值只有1
,即可执行文件的名称。