我想從二進制文件讀取數據到一個std :: string.Here是我第一次嘗試。讀取二進制數據到std :: string C++
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char const *argv[])
{
fstream file("output.bin" , ios::out | ios::binary | ios::in);
string my_str(5, '\0');
file.read(my_str.c_str(), 5);
cout << "String = " << my_str<< endl ;
}
,編譯器給了錯誤:
error: invalid conversion from ‘const char*’ to ‘std::basic_istream<char>::char_type* {aka char*}’ [-fpermissive]
file.read(my_str.c_str(), 5);
據我瞭解,c_str()返回一個常量指針不能在讀的方法使用,所以我改變了我的做法有點(你可以在下面看到)。有一個更好的方法嗎 ?
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char const *argv[])
{
fstream file("output.bin" , ios::out | ios::binary | ios::in);
string my_str(5, '\0');
char buffer[6];
file.read(buffer, 5);
buffer[5] = '\0';
my_str = string(buffer);
cout << "String = " << my_str<< endl ;
}
PS:原諒我,如果我不能讓自己清楚,這是我第一次在這裏:)
我會用'的std ::矢量'或'的std ::矢量'代替std :: string' –
Slava
我永遠無法理解人們爲什麼使用'std :: string'作爲二進制數據。請記住,這個容器的'value_type'是'char',這可能會導致與符號擴展有關的問題(例如,想想'my_str [3] == 0x95'的結果會是什麼)。你可能想使用'std :: vector'。 –