回答
std::string s(vec.begin(), vec.end());
// now use s.c_str()
我認爲這應該是相當安全的。
也許使用兩個迭代器構造函數(vec.begin(),vec.end())'而不是?似乎有點更習慣。 – Philipp 2010-07-19 09:58:49
非常好的一點! &vec [0]只是我的一個壞習慣。 – 2010-07-19 10:00:58
也許你可以使用std::string
而不是std::vector<char>
?
我相信std::string
與std::vector<char>
類似,所以你可以用同樣的方法和它的附加功能。
如果是這樣,std::string
的方法.c_str()
返回一個以空字符結尾的C字符串(const char*
)。
你可以做這樣的事情:
std::string str(&myVec[0], myVec.size());
然後str.c_str()
將返回一個const char *
一起玩。但是這是假定矢量中的數據是空終止的。如果不是,那麼就沒有保證。
只有不帶大小參數的構造函數要求字符串以null結尾。 – 2010-07-19 09:49:36
嘗試簡單
LPCSTR str = &vec[0];
載體已經包含C字符串所需要的連續的存儲。但是請注意,vec
已被空終止,並且vec
不能被銷燬,而str
仍被使用。通常vec
只要不再使用就會被銷燬,因此將指針存儲到vec
是危險的,並且會導致崩潰。 OTOH,傳遞指針作爲參數可能會很好:
f(&vec[0]); // f takes a LPCSTR parameter
此外,每當保留更多內存時,內存可以四處移動,因此您必須確保在指針存在時不會操縱向量。 – 2010-07-19 10:07:23
- 1. 將矢量<unsigned char>轉換爲矢量<unsigned short>
- 2. 將矢量<derived> :: iterator轉換爲矢量<base> :: iterator
- 3. 如何將矢量<string>轉換爲矢量<char*>
- 4. 將矢量<Mat>轉換爲矢量文件Opencv
- 5. 將1D矢量轉換爲2D矢量
- 6. 如何轉換矢量<矢量<string>>爲char **
- 7. 將未知大小的矢量<矢量<string>>轉換爲字符
- 8. 將矢量<string>轉換爲矢量<double> C++錯誤
- 9. 從矢量<string>轉換爲wchar_t **
- 10. 如何將** Object.days = 256天**轉換爲** 256 **
- 11. 從LPCWSTR轉換爲LPCSTR
- 12. 如何將std :: string轉換爲LPCSTR?
- 13. 將兩個矢量<double>轉換成矢量<complex <double>>
- 14. 將矢量<unique_ptr <T>>轉換爲矢量<unique_ptr <const T>>
- 15. 如何將矢量<...>轉換爲cv :: Mat?
- 16. 將矢量<string>轉換爲char ** C++
- 17. 您可以將矢量<unsigned char>轉換爲byte []嗎?
- 18. 將字符串[]轉換爲矢量<String>
- 19. 在OpenCV中將矢量<Point3f>轉換爲CvMat *?
- 20. 有沒有一種優雅的方式將矢量<complex <float>>轉換爲矢量<short>?
- 21. 轉換:#定義XXXXXX((LPCSTR)4)
- 22. 將矢量轉換爲字符串
- 23. 將openCV矩陣轉換爲矢量
- 24. vhdl:將矢量轉換爲字符串
- 25. 將Eigen :: PermutationMatrix.indices()轉換爲數組/矢量
- 26. 將矢量轉換爲矩陣
- 27. 將矢量轉換爲邏輯矩陣
- 28. 將一列表轉換爲矢量
- 29. 將矢量轉換爲數組
- 30. 將矢量轉換爲列表
使用矢量而不是字符串的任何原因? http://stackoverflow.com/questions/1200188/how-to-convert-stdstring-to-lpcstr – DumbCoder 2010-07-19 09:40:45
@DumbCoder:看到這個問題和GMan的第一個評論的原因:http://stackoverflow.com/questions/ 3279733/ofstream-doesnt-write-buffer-to-file – ereOn 2010-07-19 09:43:20
它在一個可變參數函數中,使用vsprintf,不知道字符串在這裏是否可用...... – 2010-07-19 09:52:48