我刚刚练习编码C ++。我在Java中知道,我们可以有一个公共main方法,它可以读取输入文件名作为字符串数组参数的参数。但我想知道我是如何在C ++中执行相同的任务的?
答案 0 :(得分:1)
Java和C ++都遵循相同的C语法。所以它与你在Java中的不同之处并没有什么不同。在Java中,你有一个字符串类:
class Test {
public static void main(String args[]) {
for(int i = 0; i < args.length; i++)
System.out.println("Argument " + i + " = " + args[i]);
}
}
C / C ++主要使用原始字符数组来存储字符串。虽然标准模板库也提供了字符串类,但C ++使用本机字符数组来存储命令行参数。 main函数有两个变量:
int argc:命令行参数的数量 char * argv []:一个字符串数组
你也可以说它可以写成char ** argv,因为C / C ++中二维数组的底层表示,但两者意味着相同的事情。 C ++中上述代码的等价物是:
#include <iostream>
int main(int argc, char *argv[]) {
for(int i = 0; i < argc; i++)
std::cout << "Argument " << i << " = "
<< argv[i] << std::endl;
return 0;
}
答案 1 :(得分:0)
你这样做的方法略有不同,因为C数组不存储它们的长度,所以它作为一个单独的参数传递。
int main(int argc, char** argv) {
// Read args from argv, up to argc args.
// argv[0] is the name of the program
// argv[1] is the first argument
}
答案 2 :(得分:0)
main
函数为您提供参数计数和实际参数作为字符数组的数组。
要安全地使用此功能,您应首先将此信息转换为std::vector<std::string>
。
#include <string>
#include <vector>
int main(int argc, char *argv[]) {
std::vector<std::string> arguments;
for (int index = 0; index < argc; ++index) {
arguments.push_back(argv[index]);
}
}
您会注意到arguments[0]
等于可执行文件的文件名(理论上,这取决于您使用的系统)。如果您在Windows上并且具有名为stackoverflow.exe
的可执行文件,则使用
stackoverflow.exe one two
会导致arguments
包含{ "stackoverflow.exe"
,"one"
,"two" }
。