我想要做的是讀取名爲「test.txt」的文件,然後將文件的內容設置爲類型const char *。如何做到這一點?fstream to const char *
回答
#include <string>
#include <fstream>
int main()
{
std::string line,text;
std::ifstream in("test.txt");
while(std::getline(in, line))
{
text += line + "\n";
}
const char* data = text.c_str();
}
要小心,不要顯式調用刪除數據
會'std :: string text; std :: getline(in,text,EOF); const char * data = text.c_str();'工作更快? – 2012-07-05 23:11:42
我打算添加另一個使用sstream而不是字符串的解決方案,但我通過eq-找到了解決方案,我強烈建議您使用這個解決方案,因爲它在這裏分配和釋放每行內存時效率更高。 – 2017-07-04 16:16:19
您需要:
- 創建一個函數返回一個const char *
- 打開該文件的
fstream
- 尋求結束
- 通過查看文件位置確定文件長度(
tell
) - 尋求回到開頭
- 創建一個char *包含文件內容
- 讀取文件內容流入焦炭*
- 回報的char *指針,用函數返回加上const的
- 該文件由fstream的走出去的範圍
自動關閉,這是極不可能你真的想這樣做。該文件的內容(可能是文本或二進制數據)不可能表示指向構架上的字符的(有效)指針,因此將其[內容]表示爲const char *
並不是真正有意義的。
你可能想要的是將內容加載到內存中,然後將指針(類型爲const char *)存儲到給定塊的開頭。實現這一目標的< /迂腐>方式一:
#include <sstream>
#include <fstream>
// ...
{
std::ostringstream sstream;
std::ifstream fs("test.txt");
sstream << fs.rdbuf();
const std::string str(sstream.str());
const char* ptr = str.c_str();
// ptr is the pointer we wanted - do note that it's only valid
// while str is valid (i.e. not after str goes out of scope)
}
不應該是
是的。我每次都搞砸了,這很奇怪,因爲我通常從我的錯誤中吸取教訓。 (我很少使用stringstreams,而「每次」都是指錯誤的頭文件。)修正。 – 2012-07-05 23:06:40
- 1. Const Char to LPTSTR
- 2. const char * to LPTSTR
- 3. const char * to int cast?
- 4. C++ char const char *
- 5. const char * const char **
- 6. `const char *'到`char'
- 7. C++爲const char *爲const char * const的
- 8. Python to C/C++ const char問題
- 9. from unique_ptr <char[]> to unique_ptr <const char []>
- 10. 不能將'const char *'轉換爲'char * const *'
- 11. int execle(const char * path,const char * arg,...,char * const envp []);
- 12. 轉const const wchar_t *爲const char *
- 13. D-casting char [] const char []
- 14. 如何將const char *附加到const char *
- 15. 如何將const char連接到const char?
- 16. const constexpr char *與constexpr char *
- 17. Const char ...改變了嗎?
- 18. reinterpret_cast double to char *
- 19. Const char * vs const wchar_t *(concatenation)
- 20. static const char * const和static const char []之間有什麼區別?
- 21. 如何將const char * const轉換爲const char *
- 22. const char * const和const char []之間有區別嗎?
- 23. 什麼是char * const *?
- 24. push_back const char *
- 25. Double到Const Char *
- 26. 與const char *
- 27. const char * value lifetime
- 28. Const Char *變成
- 29. NSString爲char(不是const char)
- 30. const char ** name VS char * name []
你確定你需要一個'爲const char *'?如果你需要傳入一個需要'const char *'的函數,那麼你可以傳入'char *',如果這對你更方便的話。 – 2010-10-24 20:18:40
可能的重複[什麼是在C++中將文件sl成std :: string的最佳方式?](http://stackoverflow.com/questions/116038/what-is-the-best-way-to-slurp -a-file-into-a-stdstring-in-c) – 2010-10-24 20:19:39