Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Модератор
Эксперт Java
 Аватар для alecss131
2857 / 1364 / 407
Регистрация: 11.08.2017
Сообщений: 4,361
Записей в блоге: 2

Чтение из файла структуры с динамическим массивом

01.07.2021, 23:18. Показов 1059. Ответов 7

Студворк — интернет-сервис помощи студентам
Собственно вопрос в названии темы. Как лучше всего прочитать в меньшее количество действий структуры из файла которая содержит внутри себя динамические массивы (как примитивов так и других структур) и строки неизвестной длинны (null terminated), размер этих массивов содержится внутри структуры.
Например, как считать такое?
C++
1
2
3
4
5
struct Data{
    char[4] magic;
    uint32_t size;
    float nums[size];
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.07.2021, 23:18
Ответы с готовыми решениями:

Запись\чтение файла, динамическим массивом структур
День добрый! Хочу записать и считать текстовый файл динамическим массивом струтур. На выводе "жуть". Подскажите что делаю...

Ошибка структуры с динамическим массивом
Описал структуру, содержащую динамический массив. По сути получился динамический массив динамических массивов: main() { int...

Инициализация структуры с динамическим массивом внутри функции
Добрый вечер! Начала изучать Си, столкнулась с такой проблемой. Программы со структурами с динамическими массивами, инициализируемые в...

7
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
01.07.2021, 23:52
alecss131, это точно С++? В С++ такую структуру создать нельзя.

Добавлено через 4 минуты
Цитата Сообщение от alecss131 Посмотреть сообщение
Как лучше всего прочитать
Через почленную десериализацию.

В частных случаях могут быть другие варианты, но они в крайней степени зависят от специфики приложения.
Например, если
структура POD, а "динамический массив" реализован через идиому flexible array member, то можно прочитать сразу через побайтовое чтение, если есть информация о совокупном размере.
0
Модератор
Эксперт Java
 Аватар для alecss131
2857 / 1364 / 407
Регистрация: 11.08.2017
Сообщений: 4,361
Записей в блоге: 2
02.07.2021, 11:04  [ТС]
Цитата Сообщение от DrOffset Посмотреть сообщение
это точно С++?
я бы это назвал псевдокодом

у меня базовые знания языка и думал есть способы получше чем брутфорс
Цитата Сообщение от DrOffset Посмотреть сообщение
почленную десериализацию
а то такие вещи довольно часто встречаю в разных форматах файлов
0
Злостный нарушитель
 Аватар для Verevkin
10340 / 5758 / 1269
Регистрация: 12.03.2015
Сообщений: 26,593
02.07.2021, 11:15
Думаю, начать надо с этава:
C++
1
2
3
4
5
6
struct Data 
{
    char[4] magic;
    uint32_t size;
    float* nums;
}
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
02.07.2021, 16:35
Исходник не мой, но по-моему это оно:

C++
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
#include <string>
#include <istream>
#include <vector>
 
struct Student
{
    int ID;
    std::string name;
    std::string surname;
    int points;
 
    Student(int i, std::string n, std::string s, int p)
    : ID(i), name(std::move(n)), surname(std::move(s)), points(p) {}
};
 
std::vector<Student> read_students(std::istream & is)
{
    std::vector<Student> result;
 
    std::string name, surname;
    int id, points;
 
    while (is >> id >> name >> surname >> points)
    {
        result.emplace_back(id, name, surname, points);
    }
 
    return result;
}
C++
1
2
3
4
5
6
7
8
9
10
#include <fstream>
#include <iostream>
 
int main()
{
    std::ifstream infile("test.txt");
    auto students = read_students(infile);
 
    // ...
}
0
124 / 44 / 15
Регистрация: 01.11.2020
Сообщений: 122
02.07.2021, 19:34
vantfiles, ) и где тут структура ?
1 содержит внутри себя динамические массивы,
2 размер этих массивов содержится внутри структуры
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12938 / 6805 / 1821
Регистрация: 18.10.2014
Сообщений: 17,224
02.07.2021, 20:32
Цитата Сообщение от alecss131 Посмотреть сообщение
Например, как считать такое?
C++
1
2
3
4
5
struct Data{
    char[4] magic;
    uint32_t size;
    float nums[size];
}
Такого нет ни в С, ни в С++. О чем речь? Что имеется в виду под "динамическими массивами"?
0
 Аватар для vantfiles
1018 / 1914 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
03.07.2021, 05:54
Цитата Сообщение от stepForward Посмотреть сообщение
1 содержит внутри себя динамические массивы,
2 размер этих массивов содержится внутри структуры
Например:

Цитата Сообщение от vantfiles Посмотреть сообщение
std::string name;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.07.2021, 05:54
Помогаю со студенческими работами здесь

Задача с итератором, динамическим массивом и считыванием с файла
К завтрашнему дню нужно иметь решение нескольких подобных задач. Кто может напишите программу с пояснениями (хотя и самой программы вполне...

как в файл с динамическим массивом вставить 2 старших байта первого элемента в конец файла,а 2 младших байта в середину файла
нужно в файл с динамическим массивом вставить 2 старших байта первого элемента в конец файла,а 2 младших байта в середину файла, но почему...

Создание файла с массивом и чтение этого файла обратно используя ShareActionProvider
Есть созданный массив, после нажатия на кнопку он должен вносится в файл, а потом передать этот файл используя ShareActionProvider. После...

Чтение файла с массивом дробных чисел
Добрый день, до это момента долго шарил форум.. решил создать свою тему. Надо чтобы прорамма читала файл формата grd и заполненный дробными...

C++ чтение текста из файла в массив и работа с массивом
Вобщем пишу прогу по курсачу анализатор лог файлов crontab в нём события записаны в таком формате, и их овер дохрена 200 гдето ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru