C/C++

Нужно найти в бинарном файле введенные пользователем данные.

В бинарном файле найти данные введенные пользователем с консоли и вывести все строки где встречаются эти данные. Я сделал проверку строк но при чтение программа выдает не предложения, а какие-то знаки.
 #include  
#include
#include

using namespace std;
void CreateTrain() {
setlocale(LC_ALL, "rus");
string repeat1 = "y";
while (repeat1 == "y") {
ofstream Train("Train.dat",ios_base::binary|ios::app);
if (Train.is_open()) {
cout place;
cin >> number;
cin >> time;
string fileinput = "Place: " + place + " Train number: " + number + " Arrival time: " + time;//Совмещение всех данных
Train.write((char*)&fileinput, sizeof(fileinput));//добавление данных в бинарный файл
Train
Нельзя сохранять в бинарном виде любую информацию, содержащую ссылки и указатели. Это тоже самое что на свидание отправить свою фотографию.
ДК
Дилшод Корабоев
51 416
Лучший ответ
"В бинарном файле найти данные... и вывести все строки..." - это постановка задачи? Её автору нужно померить температуру.

Не знаю, какие вы строки надеетесь найти в бинарном файле, но навскидку:
 Train.write((char*)&fileinput, sizeof(fileinput)); 
Это - полная чепуха. Вы, конечно, получите таким образом настоящий бинарный файл (в том смысле, что он будет полон непечатаемых символов), но вряд ли эти данные удастся потом использовать каким-либо разумным образом.

А вот прикольный способ вывести кучу рандомного мусора в стандартный вывод или попасть на GPF/SIGSEGV, в зависимости от платформы:
 printf((char*)&file);  

Симметричная операция чтения:
 Train.read((char*)&file, sizeof(file)); 
также приведёт вас в заботливые руки коредампа или GPF при попытке что-то прочитать из строки. Хотя, может, дело обойдётся рандомными закорючками. Раньше, когда терминалы пищали при выводе символа с ASCII кодом 7, сразу было слышно, когда кто-то неосторожно плюхнул бинарник в терминал.

Смысл затеи открывать файл как бинарный, а потом делать
 while (getline(Train,line)) 
тоже ускользает от моего понимания.

Хоть почитайте Википедию, что такое бинарный файл, и что такое текстовый. И заодно об указателях, взятии адреса и разыменовании что-нибудь почитайте. И о том, как устроен std::string, и чем он отличается от char *.

И замечание общего вида: C++ даёт программисту много свободы. Вы можете взять указатель от объекта, привести его к указателю на другой тип, нагадить во внутреннее представление объекта, а компилятор вам и слова не скажет. Где-то во время выполнения, совсем в другом месте, всплывёт труднообнаруживаемая ошибка. Чтобы не попадать в дурацкие ситуации, нужно ясно представлять себе, что делает каждая строчка кода. Если вы не в состоянии это делать, то C++ - не ваш язык. Возьмите Java или Python и пишите наугад, а там компилятор или додумает за вас, или подскажет, где ошибка.
Ильсур Фахриев
Ильсур Фахриев
87 571