C++,命令行,参数

1 c++ parameters command-line

我从命令行启动我的c ++程序:

program input_file1 input_file2 output_file
Run Code Online (Sandbox Code Playgroud)

哪里

int main( int argc, char *argv[] )
{
    short indicator= 3;
    char input_file1[4096], input_file2[4096], output_file[4096];
    char *p_file = NULL;
    while ( --argc > 0 ) {
        switch (--indicator) {
          case 2:
            p_file = output_file;
            break;
          case 1:
            p_file = input_file2;
            break;
          case 0:
            p_file = input_file1;
            break;
        }

        for (char *argument = argv[argc]; ; ++argument) {
            if (*argument == '\0')
                break;
            else
                *p_file++ = *argument;
        }

        *p_file = '\0'; 
    }

    std::cout << input_file1 << '\n';
    std::cout << input_file2 << '\n';
    std::cout << output_file << '\n';
}
Run Code Online (Sandbox Code Playgroud)

但真正的论点

program D:\\data\\file1.txt D:\\data\\file2.txt D:\\data\\file3.txt
Run Code Online (Sandbox Code Playgroud)

在文件的名称中只存储第一个字母D ...

Output:
D
D
D
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助...

Bjö*_*lex 9

好的,所以这是短版本:

int main(int argc, char *argv[]) {
    if (argc != 2) {
        std::cout << "This program requires 1 argument!" << std::endl;
        return 1;
    }
    std::string input_file(argv[1]);
    std::cout << input_file << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

你应该可以从这里拿走它.

  • `argv [0]`是程序名!您需要将所有偏移量增加1. (2认同)

Tri*_*ner 7

这是一个C问题,而不是C++问题,但是因为它被标记为C++,我将为您的问题建议一个C++解决方案:

int main( int argc, char *argv[] ) {
     std::vector<std::string> args(argv+1, argv+argc);
     std::cout << args[0] << '\n' << args[1] << '\n' << args[2] << std::endl;
}
Run Code Online (Sandbox Code Playgroud)

更新使用argv上的迭代器来填充向量args(感谢Space_C0wb0y)

  • 更好用:`std :: vector <std :: string>(argv + 1,argv + argc);`. (7认同)