2016-04-13 8 views
-1

これは、コマンドラインの文字配列を文字列に変換する適切な方法であるとみなされているようです。このコードは実際に何をしています

vector<std::string> params(argv+1, argv+argc); 

が、私は本当に私がARGV印刷しようとすると、[1]それは、文字列の最初の文字だけであるので、ここで何が起こっているか理解していませんよ。実際にここで何が起こっているのですか? argvに2(argcの値)を加えることが、その1つの引数に対してその配列のすべての文字を得ることができるのは確かです。例えば

ARGVを印刷する[1]を

cout << *argv[1]; 

ようtest.txtの第二パラメータの最初の文字であるTをバック与えます。ポイントこのうち

cout << argv[1]; 

のためのフレッドへ

おかげで、文字列全体を返しんが、私の手立てテストは、私はこの

cout << argv + argc; 

を行うことはできないと引数の間にその動きをします。

+3

MCVEは王です。 'argv [1]'をどうやって印刷していますか? – SergeyA

+2

いいえ、 'argv [1]'は最初の文字だけではありません... –

+1

代わりに 'cout << argv [1] << '\ n';'を試してください。 '* argv [1]'は実際には単一の文字です。 –

答えて

5

コードがコマンドラインからトークンをベクトルに取り込むように見えます。

コードでは、the std::vector constructor for sequencesを使用し、イテレータを最初の引数(プログラム名の後)に渡し、1つはコマンド行の最後の引数を渡します。確認するには

、これを試してみてください。

for (unsigned int i = 0; i < argc; ++i) 
{ 
    std::cout << "Argument [" << i << "]: " << argv[i] << std::endl; 
} 
std::cout << "\nFrom vector:\n" 
for (unsigned int j = 0; j < params.size(); ++j) 
{ 
    std::cout << "params[" << j << "]: " << params[j] << "\n"; 
} 
関連する問題