我在下面的代碼中得到了分割檔案。原因在第 10 行,我猜我在哪里使用 char* 緩沖區。我想知道這是為什么。
是不是因為緩沖區中的記憶體還沒有分配?
這是代碼:
1 #include <iostream>
2 #include <fstream>
3
4 int main()
5 {
6 const char* filename = "directory of my file";// mnt/c/Users/...
7 std::fstream fin(filename,std::fstream::in);
8 if(!fin.is_open())
9 std::cout << "Opps!" << std::endl;
10 char* buffer = NULL;//if char buffer[100] then it will be good.
11 while(!fin.eof())
12 {
13 fin.getline(buffer,100);
14 std::cout << buffer << std::endl;
15 }
16 return 0;
17 }
uj5u.com熱心網友回復:
是不是因為緩沖區中的記憶體還沒有分配?
是的。事實上,你甚至沒有緩沖區。該指標buffer為 NULL,這意味著它指向您無權訪問的記憶體位置。然后您繼續并告訴getline()它可以從該地址開始最多寫入 100 個位元組。
它在您使用時起作用,char buffer[100]因為這是一個分配在堆疊上的陣列,足夠大以容納您承諾getline()可以寫入的 100 個位元組的上限。
如果您事先不知道一行的長度并希望能夠處理任意長度,請考慮std::string改用。這是在 C 中逐行讀取檔案的典型方法:
std::string line;
while (std::getline(fin, line))
{
std::cout << line << "\n";
}
另請閱讀:為什么回圈條件中的 iostream::eof 被認為是錯誤的?
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/364593.html
