2017-02-27 1 views
-1

forループに次のコードがあります。文字列をchar **にコピーしようとしています。しかし、以下のコードを実行すると、自分のコードの「ここ」の部分に決して行きません。代わりに、forループの次の反復が実行されます。誰もこの行動を説明できますか?strncatまたはstrcpyはループを次の繰り返しに続けることができますか?

string str = "ls -1"; 
string cmd = "ls"; 
char** command; 

command = new char*[str.size()+1]; 

strncat(*command, str.c_str(), str.size+1); 
cout << "HERE\n"; 

*command = strtok(*command, " "); 

execvp(cmd.c_str(), command); 

EDIT:

私はexecvpののパラメータに合うように、スペースで区切るためにはstrtokを使用する**文字を使用しています。

+0

'cout'をフラッシュしている可能性があります。 \ nを 'std :: endl'に置き換えて強制的にフラッシュします。 [この回答](http://stackoverflow.com/a/22345401/7359094)を参照してください。 –

+3

'** command'にはメモリを割り当てますが、' * command'には割り当てません。 –

+0

あなたはポインタの配列を新しいものにしています。これらのポインタは実際の文字バッファを指すように設定されていないので、strncatを使ってポインタを始めることはできません。文字列やベクトルを使用する方が良いでしょう。 –

答えて

0

が多すぎ、ポインタ

char** command; 
command = new char*[str.size()+1] 

は、C++の文字列とCスタイル '文字列' を混合停止、

char* command; 
command = new char[str.size()+1] 

かそれ以上でなければなりません。

関連する問題