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. 使用文件名字符串作爲SystemVerilog接口參數?
- 5. 使用字符數組作爲文件名?
- 6. 將char轉換爲char無效* - 將字符串數組中的char複製到另一個字符串數組
- 7. 搜索由char *指向的字符或字符串數組*
- 8. 字符串作爲文件名C#
- 9. 使用C讀取csv文件的字符串到2D char *數組使用C
- 10. 用C解析「字符串」(char數組)爲字符串,整數和int
- 11. 將LPTSTR轉換爲字符串或char *以寫入文件
- 12. 字符串作爲C#3.0中的char []數組?
- 13. 在Java中,如何將字符串轉換爲char或char字符串?
- 14. 使用%s讀取char數組,即字符串說明符
- 15. 使用字符串作爲變量名
- 16. 使用字符串作爲類名
- 17. 使用字符數組作爲字符串流緩衝區
- 18. .txt文件爲char數組?
- 19. 使用||將字符串分割成Java字符串數組或|
- 20. 如何使用字符串資源名稱字符串數組
- 21. 使用字符串作爲鍵訪問數組中的數組
- 22. const無符號字符*轉換爲/從字符串或const char *
- 23. 作爲整數讀入字符串文件到數組中?
- 24. 將char數組中的換行符轉換爲字符串?
- 25. 將projectDir作爲一個字符串或char *在C++中
- 26. C++:從字符串爲char *
- 27. 使用字符串的文件名
- 28. 將NULL字節的C字符串轉換爲char數組
- 29. 使用文件提取操作符讀取int或字符串
- 30. 將「SWIFT」字符串命名爲數組
有很多教程糟糕的建議的網上。這只是其中之一.. – drescherjm