2010-07-19 85 views
1

有沒有辦法轉換上述?將矢量<char> buf(256)轉換爲LPCSTR?

如果是這樣,最好的方法是什麼?

我想你可以遍歷矢量並分配給const char*,但我不確定這是否是最好的方法。

+0

使用矢量而不是字符串的任何原因? http://stackoverflow.com/questions/1200188/how-to-convert-stdstring-to-lpcstr – DumbCoder 2010-07-19 09:40:45

+0

@DumbCoder:看到這個問題和GMan的第一個評論的原因:http://stackoverflow.com/questions/ 3279733/ofstream-doesnt-write-buffer-to-file – ereOn 2010-07-19 09:43:20

+0

它在一個可變參數函數中,使用vsprintf,不知道字符串在這裏是否可用...... – 2010-07-19 09:52:48

回答

3
std::string s(vec.begin(), vec.end()); 
// now use s.c_str() 

我認爲這應該是相當安全的。

+1

也許使用兩個迭代器構造函數(vec.begin(),vec.end())'而不是?似乎有點更習慣。 – Philipp 2010-07-19 09:58:49

+0

非常好的一點! &vec [0]只是我的一個壞習慣。 – 2010-07-19 10:00:58

1

也許你可以使用std::string而不是std::vector<char>

我相信std::stringstd::vector<char>類似,所以你可以用同樣的方法和它的附加功能。

如果是這樣,std::string的方法.c_str()返回一個以空字符結尾的C字符串(const char*)。

0

你可以做這樣的事情:

std::string str(&myVec[0], myVec.size()); 

然後str.c_str()將返回一個const char *一起玩。但是這是假定矢量中的數據是空終止的。如果不是,那麼就沒有保證。

+1

只有不帶大小參數的構造函數要求字符串以null結尾。 – 2010-07-19 09:49:36

0

嘗試簡單

LPCSTR str = &vec[0]; 

載體已經包含C字符串所需要的連續的存儲。但是請注意,vec已被空終止,並且vec不能被銷燬,而str仍被使用。通常vec只要不再使用就會被銷燬,因此將指針存儲到vec是危險的,並且會導致崩潰。 OTOH,傳遞指針作爲參數可能會很好:

f(&vec[0]); // f takes a LPCSTR parameter 
+1

此外,每當保留更多內存時,內存可以四處移動,因此您必須確保在指針存在時不會操縱向量。 – 2010-07-19 10:07:23