3
A
回答
3
你似乎是用C++,其中std::ifstream::open
只接受const char *
,舊版本的不是std::string
(見docs):
void open (const char* filename, ios_base::openmode mode = ios_base::in);
正如你所看到的,你不能傳遞std::string
這裏。
在C++ 11和更新,你可以傳遞一個std::string
還有:
void open (const string& filename, ios_base::openmode mode = ios_base::in);
更好的方法:使用std::string
輸入文件名和做File.open(filename.c_str());
打開該文件。
2
該建議基本上是錯誤的。它試圖解決的問題是,在過去的時代,文件流花費了const char*
作爲文件名的參數,因此您不能直接使用std::string
作爲名稱。當然,這個問題的答案是使用std::string
,並調用c_str()
通過文件名:
std::string name = "test.txt";
std::ofstream out(name.c_str());
這些天來,文件流也有一個構造函數std::string
,所以你可以這樣做:
std::string name = "test.txt";
std::ofstream out(name);
2
我懷疑是因爲ifstream::open(const char*)
的原型。就個人而言,我會寫的代碼爲:
string filename;
cin >> filename;
ifstream testmarks;
testmarks.open(filename.c_str());
但是,這又是更複雜性來解釋,而這顯然是針對某人非常新的C++。
1
這是錯誤的,這是編寫容易受緩衝區溢出影響的程序的一種很好的方式,至少在本例中是這樣寫的。
0
「打開」函數期望字符指針。
但是它是好的做到這一點:
std::string filename;
std::cin >> filename;
std::ifsteam f;
f.open(filename.c_str());
相關問題
- 1. 使用字符串作爲文件名
- 2. 需要printf作爲字符串或char數組的輸出
- 3. 字符串爲char *編組
- 4. 文件作爲字符串數組春
- 5. 使用文件名字符串作爲SystemVerilog接口參數?
- 6. 使用字符數組作爲文件名?
- 7. 將char轉換爲char無效* - 將字符串數組中的char複製到另一個字符串數組
- 8. 搜索由char *指向的字符或字符串數組*
- 9. 字符串作爲文件名C#
- 10. 用char數組連接C++字符串
- 11. 使用char數組將字符串轉換爲int
- 12. 使用C讀取csv文件的字符串到2D char *數組使用C
- 13. 使用數組作爲動態JQuery字符串變量名稱
- 14. 傳遞字符串文字作爲char *通過參數
- 15. 將LPTSTR轉換爲字符串或char *以寫入文件
- 16. 用C解析「字符串」(char數組)爲字符串,整數和int
- 17. 字符串作爲數組
- 18. 字符串作爲C#3.0中的char []數組?
- 19. 導入文件中使用的字符串作爲名稱
- 20. 使用字符串作爲std :: fstream的文件名。
- 21. 使用SimpleDateFormat作爲字符串的文件名
- 22. 細分字符串並使用子字符串作爲分數組件
- 23. 在Java中,如何將字符串轉換爲char或char字符串?
- 24. 爲什麼jQuery.unique無法使用字符串或數字數組?
- 25. 如何將char數組轉換爲字符串數組?
- 26. 使用%s讀取char數組,即字符串說明符
- 27. 使用字符串作爲類名
- 28. 使用字符串作爲變量名
- 29. 使用字符串作爲屬性名
- 30. 使用字符串作爲變量名
有很多教程糟糕的建議的網上。這只是其中之一.. – drescherjm