在网上搜索如何将命令行参数传递给C ++代码的示例,我想出了一个废弃的帖子,其中正在解释此过程。这段代码不起作用,经过一些修改,我想出了以下(工作)代码:
#include <iostream>
#include <windows.h>
#include <fstream>
#include <string>
using namespace std;
// When passing char arrays as parameters they must be pointers
int main(int argc, char* argv[]) {
if (argc < 2) { // Check the value of argc. If not enough parameters have been passed, inform user and exit.
std::cout << "Usage is -i <index file name including path and drive letter>\n"; // Inform the user of how to use the program
std::cin.get();
exit(0);
} else { // if we got enough parameters...
char* indFile;
//std::cout << argv[0];
for (int i = 1; i < argc; i++) { /* We will iterate over argv[] to get the parameters stored inside.
* Note that we're starting on 1 because we don't need to know the
* path of the program, which is stored in argv[0] */
if (i + 1 != argc) {// Check that we haven't finished parsing already
if (strcmp(argv[i],"/x")==0) {
// We know the next argument *should* be the filename:
char indFile=*argv[i+1];
std::cout << "This is the value coming from std::cout << argv[i+1]: " << argv[i+1] <<"\n";
std::cout << "This is the value of indFile coming from char indFile=*argv[i+1]: " <<indFile <<"\n";
} else {
std::cout << argv[i];
std::cout << " Not enough or invalid arguments, please try again.\n";
Sleep(2000);
exit(0);
}
//std::cout << argv[i] << " ";
}
//... some more code
std::cin.get();
return 0;
}
}
}
使用以下命令从Windows命令行执行此代码:
MyProgram.exe /x filename
返回下一个输出:
This is the attribute of parameter /x: filename
This is the value from *argv[i+1]: f
原帖[{3}}没有编译;上面的代码。 如你所见,打印argv [2]给我文件的名称。当我尝试将文件名捕获到另一个var中时,我可以在C ++程序中使用它,我只获得第一个字符(第二个响应行)。
现在我的问题:如何从指针指向的命令行参数中读取值? 希望有人可以用C ++帮助这个新手: - )
答案 0 :(得分:1)
*argv[i+1]
访问char* argv[]
参数的第一个字符。
要获得整个价值,请使用类似
的内容std::string filename(argv[i+1]);
代替。
答案 1 :(得分:0)
您无法在单个char
中存储字符串。
以下是将main
参数复制到更易于管理的对象的惯用语:
#include <string>
#include <vector>
using namespace std;
void foo( vector<string> const& args )
{
// Whatever
(void) args;
}
auto main( int n, char* raw_args[] )
-> int
{
vector<string> const args{ raw_args, raw_args + n };
foo( args );
}
请注意,此代码依赖于假设main
参数的编码可以表示实际的命令行参数。这种假设在Unix-land中存在,但在Windows中则不然。在Windows中,如果要在命令行参数中处理非ASCII文本,则最好使用第三方解决方案或滚动自己的解决方案,例如:使用Windows&#39; GetCommandLine
API函数。