Я пытаюсь прочитать данные из двоичного файла в std :: string. Вот что я пробовал вначале.Чтение двоичных данных в 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 ;
}
пс: простите меня, если я не мог заставить себя ясно, что это мой первый раз здесь :)
Я хотел бы использовать 'станд :: вектор' или 'станд :: вектор ' вместо из 'std :: string' –
Slava
Я никогда не мог понять, почему люди используют' std :: string' для двоичных данных. Имейте в виду, что «value_type» этого контейнера является 'char', что может привести к проблемам, связанным с расширением знака (например, подумайте о том, каким будет результат' my_str [3] == 0x95'). Вы можете использовать 'std :: vector'. –