2017-02-27 80 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); 

編輯:

我使用一個char **,以適應execvp的參數,並使用strtok的分離的空間。

+0

沖洗'cout'可能有問題。將\ n替換爲'std :: endl'來強制刷新。看[這個答案](http://stackoverflow.com/a/22345401/7359094)。 –

+3

您爲'** command'分配內存,但不爲'* command'分配內存。 –

+0

你正在創建一個指向char的指針數組,所以這些指針並沒有被設置爲指向任何實際的字符緩衝區,所以你不能只是開始在它們上使用strncat。你最好使用字符串和向量,這很難搞砸。 –

回答

0

也可能指針

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

應該

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

或者更好,停止混合C++字符串和C風格 '字符串'。