2014-04-09 25 views
0

這段代碼是一個大程序的一部分。我現在面臨的問題是,當我用「寫」的成員函數將一個字符串寫入該文件,它不顯示字符串的最後一個字符:文件未顯示最後一個字符串當寫入文件

#include <iostream> 
#include <cstring> 
#include <string> 
#include <cctype> 
#include <fstream> 
#include <cstring> 

using namespace std; 

int main() 
{ 

    fstream file1("https://stackoverflow.com/users/xxxxxxx/desktop/file1.txt", ios::out); 
    string data; 
    cout << "Enter string: " << endl; 
    getline(cin, data); 
    file1.write(reinterpret_cast<char*>(&data), data.size()); 
    //file1 << data; 
    file1.close(); 
    return 0; 
} 

例如:如果輸入字符串:「Hello World」的。 在文件上它會顯示:「Hello Worl」, 但是如果我使用「file1 < < data」輸入字符串,它確實工作正常。請幫我在這

回答

0

爲什麼要將字符串的地址轉換爲char *?這不是一個有意義的轉換 - 您正在投射std::basic_string<char>*char*。我懷疑你想把字符串當作char *,因爲write接受const char*作爲參數。您可以通過執行data.c_str()訪問存儲在您的data中的字符序列。

2

file1.write(reinterpret_cast<char*>(&data), data.size());

不這樣做,你正在寫的string對象本身的文件。如果你真的想使用write,你必須獲得一個指向該字符串保存,這樣第一炭:

file1.write(data.data(), data.size());

只需使用<<操作。

+0

謝謝,但我也有一個後續問題:何時使用**寫入**和何時使用** << **操作符寫入文件? –

+0

當你想寫未格式化的二進制數據時,你應該使用'ostream :: write'。有關更詳細的解釋,請參閱http://www.cplusplus.com/doc/tutorial/files/。 – DigitalEye