Ввожу и считываю данные этим кодом
#include "stdafx.h"
#include "iostream"
#include <fstream>
#include <windows.h>
using namespace std;
struct Node{
int n;
char f[8];
};
struct List{
Node *head;
Node *tail;
int count;
};
void addNode(List *L){
Node *temp;
temp = new Node;
cout << endl << "Введите число: ";
cin >> temp->n;
cout << endl << "Введите f: ";
char Lol[8];
cin >> Lol;
strcpy_s(temp->f, Lol);
if(L->head != NULL){
L->tail = L->head;
L->head = temp;
} else {
L->head = temp;
}
L->count++;
}
void insertNode(List * L, Node * N){
if(L->head != NULL){
L->tail = L->head;
L->head = N;
} else {
L->head = N;
}
L->count++;
}
void createList(List *L){
L->count = 0;
L->head=L->tail=NULL;
}
int main(){
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
string path = "file.txt";
ifstream fin;
fin.open(path);
if(!fin.is_open()){
cout << endl << "Ввод данных: " << endl;
List L;
createList(&L);
addNode(&L);
addNode(&L);
ofstream fout;
fout.open(path, ios::app);
if(!fout.is_open()) cout << "GLOBAL ERROR!" << endl;
else {
cout << "Новые данные успешно сохранены!" << endl;
fout.write((char*)&L, sizeof(List));
cout << endl << L.count << endl;
for(int i = 0; i < L.count; i++){
Node * N = new Node;
fout.write((char*)N, sizeof(Node));
}
}
fout.close();
} else {
cout << "Файл открыт!" << endl;
List Ls;
fin.read((char*)&Ls, sizeof(List));
int count = Ls.count;
createList(&Ls);
for(int i = 0; i < count; i++){
Node * Nd = new Node;
fin.read((char*)Nd, sizeof(Node));
cout << Nd->n << "\t" << Nd->f << endl;
insertNode(&Ls, Nd);
}
cout << endl << "Успешно выгружено!" << endl;
if(Ls.head != NULL) cout << endl << Ls.head->f << "\t" << Ls.tail->f << endl;
else {
cout << "NULL \tcount = " << count << endl;
}
}
fin.close();
system("pause");
return 0;
}
Здесь мы задаем 2 структуры Node, которые в последствие впихиваем в структуру List
При чтении данных получается непонятно. Данные структуры List, т.е. count передается как надо, в отличие от данных структуры Node, они выглядят непонятно как
В чем ошибка?
Вместо заполненных нод вы пытаетесь писать в файл куски неинициализированной памяти, что приводит к неопределенному поведениюЖ
Node * N = new Node;
fout.write((char*)N, sizeof(Node));
Еще перед этим вы пишите в файл структуру с указателями, которые протухают и не могут быть использованы после чтения из файла в другом процессе.
fout.write((char*)&L, sizeof(List));
И память утекает стремительным потоком...
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Написал граф через классы на списку смежностиПомогите написать корректный алгоритм поиска мостов
Как можно сделать бесконечный скролл фона при этом не теряя гибкости процентных величин?
Есть ли в этом случае возможность выровнять <span class = "b"> по высоте как auto?
Есть массив объектовНужно сделать вывод данных по ключу со всех объектов, дело в том, что ключ который вводишь есть, значение у ключа тоже...