1 |
int *arr = new int[10]; //указатель на начало массива, состоящего из 10 элементов |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
//Запись массива структур в бинарный файл и чтение clang Листинг #1 #include <iostream> #include <fstream> using namespace std; #pragma pack (push, 1) struct MyContainer{ int x; double y; }; #pragma pack (pop) int main(){ const char* PATH = "C:\\MyFiles\\5.txt"; const int SIZE = 5; //Это размер массива MyContainer O[SIZE]; //Массив структур, умеет хранит 5 элементов типа MyContainer MyContainer R[SIZE]; //В этот массив будем читать значения из файла O[0].x = 10; O[0].y = 9; O[1].x = 8; O[1].y = 7; O[2].x = 6; O[2].y = 5; O[3].x = 4; O[3].y = 3; O[4].x = 2; O[4].y = 1; ofstream fo(PATH, ios::binary); //Записываем массив O в файл, бинарный режим fo.write((char*)O, sizeof(O)); fo.close(); ifstream fr(PATH, ios::binary); //Читаем файл и переносим значения в массив R fr.read((char*)R, sizeof(R)); fr.close(); //Обходим массив R for (unsigned i=0; i<SIZE; i++) { cout << R[i].x << ';' << R[i].y << '\n'; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
//Запись массива структур в бинарный файл и чтение clang Листинг #2 #include <iostream> #include <fstream> using namespace std; struct MyContainer{ int x; double y; }; int main(){ const char* PATH = "C:\\MyFiles\\5.txt"; const int SIZE = 5; //Это размер массива MyContainer O[SIZE]; //Массив структур, умеет хранит 5 элементов типа MyContainer MyContainer R[SIZE]; //В этот массив будем читать значения из файла O[0].x = 10; O[0].y = 9; O[1].x = 8; O[1].y = 7; O[2].x = 6; O[2].y = 5; O[3].x = 4; O[3].y = 3; O[4].x = 2; O[4].y = 1; ofstream fo(PATH, ios::binary); for (unsigned i=0; i<SIZE; i++){ fo.write((char*)&O[i].x, sizeof(O[i].x)); //Записали значение x fo.write((char*)&O[i].y, sizeof(O[i].y)); //записали значение y } fo.close(); ifstream fr(PATH, ios::binary); for (unsigned i=0; i<SIZE; i++){ fr.read((char*)&R[i].x, sizeof(O[i].x)); //Записали значение x fr.read((char*)&R[i].y, sizeof(O[i].y)); //Записали значение y } fr.close(); /*ОБХОДИМ*/ for (unsigned i=0; i<SIZE; i++) { cout << R[i].x << ';' << R[i].y << '\n'; } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
//Листинг #а1 структура с указательной переменной #include <iostream> #include <fstream> using namespace std; struct MyContainer{ int *x; int size_arr; }; int main(){ const char* PATH = "C:\\MyFiles\\5.txt"; const int SIZE = 5; //Это размер массива MyContainer values[SIZE]; //Массив структур называется values, вмещает SIZE структур типа MyContainer /*создаём несколько массивов структур*/ for (unsigned i=0; i<SIZE; i++){ values[i].size_arr = i + 5; values[i].x = new int[values[i].size_arr]; } /*Заполняем массивы значениями*/ int count = 0; for (unsigned i=0; i<SIZE; i++){ for (unsigned j=0; j<values[i].size_arr; j++){ values[i].x[j] = count++; //Записываем в массив число count } } for (unsigned i=0; i<SIZE; i++){ for (unsigned j=0; j<values[i].size_arr; j++){ cout << values[i].x[j] << '\t'; //Записываем в массив число count } cout << '\n'; } for (unsigned i=0; i<SIZE; i++){ delete []values[i].x; //Зачищаем указатели } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
//Листинг #3 clang Запись в файл простой структуры с указателем Поэлементно #include <iostream> #include <fstream> using namespace std; /*НАША СТРУКТУРА, ЗАПИСЫВАЕМАЯ В ФАЙЛ*/ struct MyContainer{ int *x; int size_arr; }; int main(){ const char* PATH = "C:\\MyFiles\\5.txt"; const int SIZE = 5; //Это размер массива MyContainer values[SIZE]; //Массив структур называется values, вмещает SIZE структур типа MyContainer MyContainer R[SIZE]; //Массив структур называется R, вмещает SIZE структур типа MyContainer, будем в него переносить значения из файла /*создаём несколько массивов структур*/ for (unsigned i=0; i<SIZE; i++){ values[i].size_arr = i + 5; values[i].x = new int[values[i].size_arr]; } /*Заполняем массивы значениями*/ int count = 0; for (unsigned i=0; i<SIZE; i++){ for (unsigned j=0; j<values[i].size_arr; j++){ values[i].x[j] = count++; //Записываем в массив число count } } /*ЗАПИСЬ МАССИВА СТРУКТУР В ФАЙЛ*/ ofstream f1(PATH, ios::binary); for (unsigned i=0; i<SIZE; i++){ f1.write((char*)&values[i].size_arr, sizeof(values[i].size_arr)); //Сначала просто запись числа for (unsigned j=0; j<values[i].size_arr; j++){ //Потом обход по всему массиву!!! f1.write((char*)&values[i].x[j], sizeof(values[i].x[j])); //и запись каждого его значения } } f1.close(); /*НАМ МАССИВ values В НАСТОЯЩЕЕ ВРЕМЯ БОЛЬШЕ НЕ НУЖЕН, ЧИСТИМ ЕГО*/ for (unsigned i=0; i<SIZE; i++){ delete []values[i].x; } /*ЧТЕНИЕ ИЗ ФАЙЛА ЗНАЧЕНИЙ В МАССИВ СТРУКТУР*/ ifstream f2(PATH, ios::binary); for (unsigned i=0; i<SIZE; i++){ f2.read((char*)&R[i].size_arr, sizeof(R[i].size_arr)); R[i].x = new int[R[i].size_arr]; //При чтении обязательно не забыть выделить память!!! for (unsigned j=0; j<R[i].size_arr; j++){ f2.read((char*)&R[i].x[j], sizeof(R[i].x[j])); } } f2.close(); /*ВЫВОДИМ НА ЭКРАН ЗНАЧЕНИЯ*/ int temp_size = 0; for (unsigned i=0; i<SIZE; i++){ temp_size = R[i].size_arr; for (unsigned j=0; j<temp_size; j++){ cout << R[i].x[j] << '\t'; } cout << '\n'; } /*ОБЯЗАТЕЛЬНО ЧИСТИМ НЕНУЖНЫЙ МАССИВ, ЕСЛИ ДЛЯ ЕГО СОЗДАНИЯ БЫЛО new*/ for (unsigned i=0; i<SIZE; i++){ delete []R[i].x; } } |
1 2 3 4 5 6 7 8 9 10 |
//Листинг #a2 /*ЗАПИСЬ МАССИВА СТРУКТУР В ФАЙЛ*/ ofstream f1(PATH, ios::binary); for (unsigned i=0; i<SIZE; i++){ f1.write((char*)&values[i].size_arr, sizeof(values[i].size_arr)); f1.write((char*)values[i].x, sizeof(values[i].x[0]) * values[i].size_arr); } f1.close(); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
//Листинг #4 clang Запись в файл простой структуры с указателем Извнутри структуры #include <iostream> #include <fstream> using namespace std; /*НАША СТРУКТУРА, ЗАПИСЫВАЕМАЯ В ФАЙЛ*/ struct MyContainer{ int *x; int size_arr; void serialize(ofstream &f){ f.write((char*)&size_arr, sizeof(size_arr)); //записываем size_arr f.write((char*)x, sizeof(x[0]) * size_arr); //записываем массив, на который указывает указатель } void deserealize(ifstream &f){ f.read((char*)&size_arr, sizeof(size_arr)); //читаем size_arr x = new int[size_arr]; //выделяем память согласно считанному числу f.read((char*)x, sizeof(x[0]) * size_arr); //читаем непосредственно значения массива } /*ФУНКЦИЯ ВЫСВОБОЖДЕНИЯ ВЫДЕЛЕННОЙ ПАМЯТИ*/ void free(){ delete []x; x = 0; } void print(){ for (unsigned i=0; i<size_arr; i++){ cout << x[i] << '\t'; } } }; int main(){ setlocale(LC_ALL,""); const char* PATH = "C:\\MyFiles\\5.txt"; const int SIZE = 5; //Это размер массива MyContainer values[SIZE]; //Массив структур называется values, вмещает SIZE структур типа MyContainer MyContainer R[SIZE]; //Массив структур называется R, вмещает SIZE структур типа MyContainer, будем в него переносить значения из файла /*создаём несколько массивов структур*/ for (unsigned i=0; i<SIZE; i++){ values[i].size_arr = i + 5; values[i].x = new int[values[i].size_arr]; } /*Заполняем массивы значениями*/ int count = 0; for (unsigned i=0; i<SIZE; i++){ for (unsigned j=0; j<values[i].size_arr; j++){ values[i].x[j] = count++; //Записываем в массив число count } } /* ЗАПИСЬ ЗНАЧЕНИЙ В ФАЙЛ */ ofstream f1(PATH, ios::binary); for (int i=0; i<SIZE; i++){ values[i].serialize(f1); } f1.close(); /*очистка масива*/ for (unsigned i=0; i<SIZE; i++){ values[i].free(); } /* ЧТЕНИЕ ЗНАЧЕНИЙ ИЗ ФАЙЛА */ ifstream f2(PATH, ios::binary); for (unsigned i=0; i<SIZE; i++){ R[i].deserealize(f2); } f2.close(); /* ВЫВОД ЗНАЧЕНИЙ МАССИВА НА ЭКРАН */ for (unsigned i=0; i<SIZE; i++){ R[i].print(); cout << '\n'; } for (unsigned i=0; i<SIZE; i++){ R[i].free(); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
//Запись массива структур в бинарный файл и чтение clang Листинг #5 #include <iostream> #include <fstream> using namespace std; /*НАША СТРУКТУРА, ЗАПИСЫВАЕМАЯ В ФАЙЛ*/ struct MyContainer{ int *x; }; int main(){ setlocale(LC_ALL,""); const char* PATH = "C:\\MyFiles\\5.txt"; const int SIZE_STRUCT = 10; //Это размер массива const int SIZE_X = 7; //Это размер массива, на который будет указывать указатель структуры unsigned value = 0; //Это значение для записи в структуру MyContainer *arr = new MyContainer[SIZE_STRUCT]; //Создаём массив из SIZE_STRUCT структур for (unsigned i=0; i<SIZE_STRUCT; i++){ arr[i].x = new int[SIZE_X]; //выделяем память каждому указателю (в каждом индексе массива сырой указатель) } /*ЗАПОЛНЕНИЕ МАССИВА СТРУКТУР ЗНАЧЕНИМИ*/ for (unsigned i=0; i<SIZE_STRUCT; i++){ for (unsigned j=0; j<SIZE_X; j++){ arr[i].x[j] = value++; } } /*ЗАПИСЬ МАССИВА СТРУКТУР В ФАЙЛ*/ ofstream f1(PATH, ios::binary); f1.write((char*)&SIZE_STRUCT, sizeof(SIZE_STRUCT)); //Сначала записали число, обозначающее вместимость массива структур for (unsigned i=0; i<SIZE_STRUCT; i++){ //Потом записали массив структур f1.write((char*)arr[i].x, sizeof(arr[i].x[0]) * SIZE_X); } f1.close(); for (unsigned i=0; i<SIZE_STRUCT; i++){ //Обходим внутренний масив структуры (тот, на который указывает указатель) delete []arr[i].x; //зачищаем каждую ячейку от указателей, к которым применялось new } delete []arr; //зачищаем основной массив /*ЭТО УЖЕ ЧТЕНИЕ*/ MyContainer *R; //Сырой указатель int size_arr = 0; //Размер массива, на который будет указывать R, позднее мы узнаем ему значение ifstream f2(PATH, ios::binary); f2.read((char*)&size_arr, sizeof(size_arr)); //Читаем из файла число в size_arr (число у нас записано в самом начале) R = new MyContainer[size_arr]; //Выделяем память общему массиву (массиву структур) согласно зачитанному числу /*выделяем память указателям, в каждой ячейке массива структур лежит сырой указатель*/ for (unsigned i=0; i<size_arr; i++){ R[i].x = new int[SIZE_X]; //Выделили память f2.read((char*)R[i].x, sizeof(R[i].x[0]) * SIZE_X); //Зачитали значения и сохранили их в выделенную память } f2.close(); /*ОБХОДИМ МАССИВ И ВЫВОДИМ ЗНАЧЕНИЯ НА ЭКРАН*/ for (unsigned i=0; i<size_arr; i++){ for (unsigned j=0; j<SIZE_X; j++){ cout << R[i].x[j] << '\t'; } cout << '\n'; } /*ЗАЧИЩАЕМ МАССИВ СТРУКТУР R*/ //Сначала чистим внутренню часть. for (unsigned i=0; i<size_arr; i++){ delete []R[i].x; //Почистили } //Потом чистим основу сиё хранящее delete []R; } |
пытаюсь таким образом прочесть файл таблицы mySQL которую предварительно пихнул в папку с exe-шником но к сожалению на экран ничего не выводит пользуюсь msvs 2013