38

ハードコーディングされたファイル パスを読み取るプログラムがあり、代わりにコマンド ラインからファイル パスを読み取るようにしたいと考えています。そのために、コードを次のように変更しました。

#include <iostream>

int main(char *argv[])
{
...
}

しかし、argv[1]このように公開された変数はポインター型のようで、文字列として必要です。このコマンド ライン引数を文字列に変換するにはどうすればよいですか?

4

7 に答える 7

41

これはすでに C スタイルの文字列の配列です。

#include <iostream>
#include <string>
#include <vector>


int main(int argc, char *argv[]) // Don't forget first integral argument 'argc'
{
  std::string current_exec_name = argv[0]; // Name of the current exec program
  std::vector<std::string> all_args;

  if (argc > 1) {
    all_args.assign(argv + 1, argv + argc);
  }
}

引数argcは、引数の数と現在の実行ファイルです。

于 2013-03-11T17:25:26.887 に答える
28

を作成できます。std::string

#include <string>
#include <vector>
int main(int argc, char *argv[])
{
  // check if there is more than one argument and use the second one
  //  (the first argument is the executable)
  if (argc > 1)
  {
    std::string arg1(argv[1]);
    // do stuff with arg1
  }

  // Or, copy all arguments into a container of strings
  std::vector<std::string> allArgs(argv, argv + argc);
}
于 2013-03-11T17:24:54.177 に答える
1
#include <iostream>

std::string commandLineStr= "";
for (int i=1;i<argc;i++) commandLineStr.append(std::string(argv[i]).append(" "));
于 2014-10-27T15:22:41.570 に答える
1

それは簡単です。これを行うだけです:

#include <iostream>
#include <vector>
#include <string.h>

int main(int argc, char *argv[])
{
    std::vector<std::string> argList;
    for(int i=0;i<argc;i++)
        argList.push_back(argv[i]);
    //now you can access argList[n]
}

@ベンジャミンリンドリーあなたは正しいです。これは良い解決策ではありません。juanchopanza が回答したものを読んでください。

于 2013-03-11T17:26:58.683 に答える