2013-10-20 158 views
4

我試圖將字符串向量轉換爲C++中的字符數組。將字符串向量轉換爲C++中的字符數組

更具體是什麼,我試圖做的是通過這個拆分如「ls -latr」 shell命令:

istringstream f(x); 
while (getline(f, x, ' ')) 
{ 
    strings.push_back(x); 
} 

相信會給我strings[0] == "ls"strings[1]==" -latr"

我試圖然後執行以下操作:

execvp(strings[0], strings); 

不過,我得到這個錯誤:

error: cannot convert ‘std::basic_string, std::allocator >’ to ‘const char*’ for argument ‘1’ to ‘int execvp(const char*, char* const*)’

因此,我試圖找出如何我可以轉換的字符串到一個char數組。

+0

將'.c_str()'添加到strings [0]的末尾;你仍然需要爲第二個參數構建另一個指針向量。 – Kal

+0

假設字符串是'std :: vector ',使用'strings [0] .c_str()'。第二個參數需要一個指針數組,所以這更復雜。 – Roddy

+0

而不是getline,你可以簡單地說'while(f >> x){strings.push_back(x); }'。 –

回答

5

閱讀the manual說穿了就是「execvp提供指針數組以NULL結尾的字符串」。所以你需要創建這樣一個數組。這裏有一種方法:

std::vector<char *> argv(strings.size() + 1); // one extra for the null 

for (std::size_t i = 0; i != strings.size(); ++i) 
{ 
    argv[i] = &strings[i][0]; 
} 

execvp(argv[0], argv.data()); 
+0

好趕先生。 +1 –

+3

沒有足夠的變換:)我剛剛添加了C++ 03 proof轉換答案。痛苦的東西 – sehe

+0

你需要顯式初始化NULL嗎?我總是被這個困惑... – Roddy

1

您可以嘗試c_str()方法std::string。它從std::string類返回類似C的字符串,即您需要用於execvpe的char *。檢查this link瞭解更多詳情。

0

如果字符數組將不會改變,你可以使用

strings[0].c_str() 
相關問題