Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 28

Считывание из бинарного файла данных в переменную типа string

25.04.2022, 17:15. Показов 2191. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть такой код:
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
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
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
 
struct statement
{
    std::string name;
    std::string surname;
    std::string date;
    int money;
};
 
void save_statement(std::ofstream& file, statement& info)
{
    int len = info.name.length();
    file.write((char*)&len, sizeof(len));
    file.write(info.name.c_str(), len);
    len = info.surname.length();
    file.write((char*)&len, sizeof(len));
    file.write(info.surname.c_str(), len);
    len = info.date.length();
    file.write((char*)&len, sizeof(len));
    file.write(info.date.c_str(), len);
    file.write((char*)&info.money, sizeof(info.money));
}
 
void load_statement(std::ifstream& file, statement& info)
{
    int len;
    file.read((char*)&len, sizeof(len));
    info.name.resize(len);
    file.read((char*)info.name.c_str(), len);
    file.read((char*)&len, sizeof(len));
    info.surname.resize(len);
    file.read((char*)info.surname.c_str(), len);
    file.read((char*)&len, sizeof(len));
    info.date.resize(len);
    file.read((char*)info.date.c_str(), len);
    file.read((char*)&info.money, len);
}
 
int main()
{
    statement info;
    std::string operation;
    std::cin >> operation;
    if(operation == "list")
    {
        std::ifstream file("save.bin", std::ios::binary);
        while(!file.eof())
        {
            load_statement(file, info);
            if(strlen(info.name.c_str()) == 0)
                return 0;
            std::cout << info.name << " " << info.surname << " " << info.date << " " << info.money << std::endl;
        }
        file.close();
    }
    if(operation == "add")
    {
        std::cout << "Input name, surname, date, money: ";
        std::cin >> info.name >> info.surname >> info.date >> info.money;
        std::ofstream file("save.bin", std::ios::app);
        save_statement(file, info);
        file.close();
    }
}
Помогите мне, пожалуйста.
Нужно понять в чем проблема: если записать строку длиной более 9 символов в переменную "info.date" затем считать с файла этот код, то получаются непонятные символы, но если написать 9 или меньше, то все хорошо считывается. Если возможно, то объясните, как это можно исправить.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.04.2022, 17:15
Ответы с готовыми решениями:

Считывание строки из бинарного файла в string
Привет всем!! Помогите новичку понять почему происходит ошибка при считывании строки из файла. void LoadFile() { string j; ...

Считывание файла в вектор типа string
Дело в том, что в общем то не работает по какой-то причине функция eof(); и даёт true только 1 раз, может я что не так понял, но она должна...

Считывание данных из бинарного файла
Доброго времени суток. Моя проблема уже была озвучена в теме. Вот листинг функции которая должна считывать данные из бинарного...

14
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
25.04.2022, 17:32
Писать напрямую в контейнер STL типа string - не лучшая идея.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void load_statement(std::ifstream& file, statement& info)
{
    int len;
 
    file.read((char*)&len, sizeof(len));
    char tmp[100];
    file.read(tmp, len);
    tmp[len]=0;
    info.name=tmp;
 
    file.read((char*)&len, sizeof(len));
    file.read(tmp, len);
    tmp[len]=0;
    info.surname=tmp;
 
    file.read((char*)&len, sizeof(len));
    file.read(tmp, len);
    info.date=tmp;
    
    file.read((char*)&info.money, len);
}
1
фрилансер
 Аватар для Алексей1153
6455 / 5657 / 1129
Регистрация: 11.10.2019
Сообщений: 15,069
25.04.2022, 17:35
Лучший ответ Сообщение было отмечено l2w как решение

Решение

l2w, используй операторы << >> вместо write/read
2
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
25.04.2022, 17:49
Цитата Сообщение от Алексей1153 Посмотреть сообщение
операторы << >>
Тогда стоит учесть, что для ввода текста с пробелами нужно использовать
getline(istream&,string&);
предварительно пропустив символ '\n' от предыдущего operator>>
2
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 28
26.04.2022, 21:32  [ТС]
тоже происходит ошибка при попытке передать строку длиною более 9ти символов
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
27.04.2022, 06:21
Цитата Сообщение от l2w Посмотреть сообщение
Тоже происходит ошибка
Позвольте Ва м не поверить.
Компилирую вот это:
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
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
#include <iostream>
#include <fstream>
#include <string>
 
struct statement
{
    std::string name;
    std::string surname;
    std::string date;
    int money;
};
 
void save_statement(std::ofstream& file, statement& info)
{
    int len = info.name.length();
    file.write((char*)&len, sizeof(len));
    file.write(info.name.c_str(), len);
    len = info.surname.length();
    file.write((char*)&len, sizeof(len));
    file.write(info.surname.c_str(), len);
    len = info.date.length();
    file.write((char*)&len, sizeof(len));
    file.write(info.date.c_str(), len);
    file.write((char*)&info.money, sizeof(info.money));
}
 
void load_statement(std::ifstream& file, statement& info)
{
    int len;
 
    file.read((char*)&len, sizeof(len));
    char tmp[100];
    file.read(tmp, len);
    tmp[len]=0;
    info.name=tmp;
 
    file.read((char*)&len, sizeof(len));
    file.read(tmp, len);
    tmp[len]=0;
    info.surname=tmp;
 
    file.read((char*)&len, sizeof(len));
    file.read(tmp, len);
    tmp[len]=0;
    info.date=tmp;
    
    file.read((char*)&info.money, len);
}
 
int main()
{
    statement info;
    std::string operation;
    std::cin >> operation;
    if(operation == "list")
    {
        std::ifstream file("save.bin", std::ios::binary);
        while(!file.eof())
        {
            load_statement(file, info);
            if(strlen(info.name.c_str()) == 0)
                return 0;
            std::cout << info.name << " " << info.surname << " " << info.date << " " << info.money << std::endl;
        }
        file.close();
    }
    if(operation == "add")
    {
        std::cout << "Input name, surname, date, money: ";
        std::cin >> info.name >> info.surname >> info.date >> info.money;
        std::ofstream file("save.bin", std::ios::app);
        save_statement(file, info);
        file.close();
    }
}
Работает при любой длине строк (<100).
Естественно, без пробелов внутри.
0
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 28
27.04.2022, 08:17  [ТС]
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
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
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
 
struct statement
{
    std::string name;
    std::string surname;
    std::string date;
    int money;
};
 
void save_statement(std::ofstream& file, statement& info)
{
    int len = info.name.length();
    char space = ' ';
    file.write((char*)&len, sizeof(len));
    file.write(info.name.c_str(), len);
    len = info.surname.length();
    file.write((char*)&len, sizeof(len));
    file.write(info.surname.c_str(), len);
    len = info.date.length();
    file.write((char*)&len, sizeof(len));
    file.write(info.date.c_str(), len);
    file.write((char*)&info.money, sizeof(info.money));
}
 
void load_statement(std::ifstream& file, statement& info)
{
    int len;
    char space;
 
    file.read((char*)&len, sizeof(len));
    char tmp[100];
    file.read(tmp, len);
    tmp[len]=0;
    info.name=tmp;
 
    file.read((char*)&len, sizeof(len));
    file.read(tmp, len);
    tmp[len]=0;
    info.surname=tmp;
 
    file.read((char*)&len, sizeof(len));
    file.read(tmp, len);
    tmp[len]=0;
    info.date=tmp;
 
    file.read((char*)&info.money, len);
}
 
int main()
{
    statement info;
    std::string operation;
    std::cin >> operation;
    if(operation == "list")
    {
        std::ifstream file("save.bin", std::ios::binary);
        while(!file.eof())
        {
            load_statement(file, info);
            if(strlen(info.name.c_str()) == 0)
                return 0;
            std::cout << info.name << " " << info.surname << " " << info.date << " " << info.money << std::endl;
        }
        file.close();
    }
    if(operation == "add")
    {
        std::cout << "Input name, surname, date, money: ";
        std::cin >> info.name >> info.surname >> info.date >> info.money;
        std::ofstream file("save.bin", std::ios::app);
        save_statement(file, info);
        file.close();
    }
}
без #include <cstring> не работает strlen, если ввести "Tom Hanks 1.1.2020 35000" - выведет все правильно, но если ввести "Tom Hanks 10.11.2020" - то теперь будет ошибка 0xC0000005, а до этого просто выводило некорректно
0
184 / 37 / 8
Регистрация: 14.04.2019
Сообщений: 238
27.04.2022, 08:29
а мне думается в конструкциях read/write((char*)&len, sizeof(len)) нужно просто &len или (int*)&len . Ведь по смыслу вы пишете/читаете двоичное представление len , а компилятору говорите. что там символьная строка
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
27.04.2022, 08:44
Цитата Сообщение от DedFriend Посмотреть сообщение
нужно просто &len
Не нужно.
Не скомпилируется. read\write принимают char*
https://en.cppreference.com/w/... tream/read

Добавлено через 1 минуту
Цитата Сообщение от DedFriend Посмотреть сообщение
компилятору говорите. что там символьная строка
char* обозначает символьную строку только тогда, когда об этом явно договорились. Т.е. если в документации к некоему api не написано, что там символьная строка (а там не написано), то это никакая не строка, а просто указатель на последовательность байт.
1
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
27.04.2022, 09:37
Лучший ответ Сообщение было отмечено l2w как решение

Решение

Нашел ошибку

Цитата Сообщение от l2w Посмотреть сообщение
std::ofstream file("save.bin", std::ios::app);
C++
1
std::ofstream file("save.bin", std::ios::app | ios::binary);
Без ios::binary при записи после байта '\n' автоматически вставляется '\r'.
И это делается независимо от того, каким оператором производится запись.
В результате, у Вас получалась неправильная длина строки date.
1
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 28
27.04.2022, 15:58  [ТС]
Действительно, ошибка была в этом, спасибо огромное. Еще хотел спросить, программа хорошо работает без буфера char tmp[], желательно ли его оставлять в программе или можно обойтись без него?
0
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
27.04.2022, 16:03
Цитата Сообщение от l2w Посмотреть сообщение
можно обойтись без него?
Можно.
Если вы делаете правильный resize, то писать в контейнер можно. Только для доступа к буферу string надо использовать метод data в С++17 и выше, либо конструкцию по примеру такой &info.name[0] в более старых версиях языка (но не старше С++11! В версиях С++98 и С++03 писать напрямую в string было нельзя). Кастить результат c_str() к неконст - не надо.
1
0 / 0 / 0
Регистрация: 19.10.2021
Сообщений: 28
27.04.2022, 16:23  [ТС]
Если вдруг нужна суть задачи для возможного более лаконичного решения:
Формат ведомости прежний. Сначала идёт имя и фамилия получателя денежных средств, далее — дата выдачи в формате ДД.ММ.ГГГГ., затем — сумма выплаты в рублях. Данные разделяются между собой пробелами. В конце каждой записи должен быть перевод строки.

Структура данных записи должна соответствовать указанному формату.

При старте программы пользователь указывает команду, которую следует осуществить: list или add. Команда list осуществляет чтение из файла ведомости как и прежде, только уже в структуры данных и отображает их на экране.

Команда add добавляет новую запись в конец ведомости.

Возможно здесь лучше использовать операторы << и >>, но если возможно решить через write/read, то желательно узнать как это правильно сделать, чтобы знать несколько способов решения

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
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
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
 
struct statement
{
    std::string name;
    std::string surname;
    std::string date;
    int money;
};
 
void save_statement(std::ofstream& file, statement& info)
{
    int len = info.name.length();
    file.write((char*)&len, sizeof(len));
    file.write(info.name.c_str(), len);
    len = info.surname.length();
    file.write((char*)&len, sizeof(len));
    file.write(info.surname.c_str(), len);
    len = info.date.length();
    file.write((char*)&len, sizeof(len));
    file.write(info.date.c_str(), len);
    file.write((char*)&info.money, sizeof(info.money));
}
 
void load_statement(std::ifstream& file, statement& info)
{
    int len;
 
    file.read((char*)&len, sizeof(len));
    char tmp[100];
    file.read(tmp, len);
    tmp[len]=0;
    info.name=tmp;
 
    file.read((char*)&len, sizeof(len));
    file.read(tmp, len);
    tmp[len]=0;
    info.surname=tmp;
 
    file.read((char*)&len, sizeof(len));
    file.read(tmp, len);
    tmp[len]=0;
    info.date=tmp;
 
    file.read((char*)&info.money, len);
}
 
int main()
{
    statement info;
    std::string operation;
    std::cin >> operation;
    if(operation == "list")
    {
        std::ifstream file("save.bin", std::ios::binary);
        while(!file.eof())
        {
            load_statement(file, info);
            if(strlen(info.name.c_str()) == 0)
                return 0;
            std::cout << info.name << " " << info.surname << " " << info.date << " " << info.money << std::endl;
        }
        file.close();
    }
    if(operation == "add")
    {
        std::cout << "Input name, surname, date, money: ";
        std::cin >> info.name >> info.surname >> info.date >> info.money;
        std::ofstream file("save.bin", std::ios::app | std::ios::binary);
        save_statement(file, info);
        file.close();
    }
}
Такой код при первом вводе данных все корректно отображает, но при последующих - снова сбивается и выдает либо некорректную информацию, либо ошибку
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,244
28.04.2022, 07:09
Лучший ответ Сообщение было отмечено l2w как решение

Решение

Цитата Сообщение от l2w Посмотреть сообщение
при последующих - снова сбивается
Тут Вы словили еще одну проблему. При чтении следующей структуры позиция переменной len оказывается смещена.
Пока не разобрался в причине, но, думаю - это какая-то проблема в выравнивании на границу машинного слова.

В общем, советую, перейдите на текстовый режим и используйте методы operator>>, operator<<.

Либо сделайте структуру без string (на char* строках):
C++
1
2
3
4
5
6
7
struct statement
{
    char name[40];
    char surname[40];
    char date[12];
    int money;
};
Тогда, можно будет структуру писать/читать целиком:
C++
1
2
3
file.write(&info,sizeof(info));
...
file.read(&info,sizeof(info));
Размер структуры автоматически выровнен на границу слова.
1
19500 / 10105 / 2461
Регистрация: 30.01.2014
Сообщений: 17,816
28.04.2022, 09:03
Цитата Сообщение от l2w Посмотреть сообщение
желательно узнать как это правильно сделать
Цитата Сообщение от l2w Посмотреть сообщение
C++
1
file.read((char*)&info.money, len);
Здесь надо
C++
1
file.read((char*)&info.money, sizeof(info.money));
Цитата Сообщение от l2w Посмотреть сообщение
C++
1
while(!file.eof())
Это неверное чтение. Флаг eof проверяют после чтения, а не до. Постоянно это тут встречается, кто вас этому учит? Он вам не друг.

Вообще в ваш код обязательно нужно добавить обработку ошибок:
Кликните здесь для просмотра всего текста
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
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
#include <iostream>
#include <fstream>
#include <string>
#include <cstring>
 
struct statement
{
    std::string name;
    std::string surname;
    std::string date;
    int money;
};
 
bool save_statement(std::ofstream& file, statement const& info)
{
    int len;
 
    len = info.name.length();
    if(!file.write((char*)&len, sizeof(len)))
        return false;
    if(!file.write(info.name.c_str(), len))
        return false;
 
    len = info.surname.length();
    if(!file.write((char*)&len, sizeof(len)))
        return false;
    if(!file.write(info.surname.c_str(), len))
        return false;
 
    len = info.date.length();
    if(!file.write((char*)&len, sizeof(len)))
        return false;
    if(!file.write(info.date.c_str(), len))
        return false;
 
    if(!file.write((char*)&info.money, sizeof(info.money)))
        return false;
 
    return true;
}
 
bool load_statement(std::ifstream& file, statement& info)
{
    int len;
 
    if(!file.read((char*)&len, sizeof(len)))
        return false;
    info.name.resize(len);
    if(!file.read(&info.name[0], len))
        return false;
 
    if(!file.read((char*)&len, sizeof(len)))
        return false;
    info.surname.resize(len);
    if(!file.read(&info.surname[0], len))
        return false;
 
    if(!file.read((char*)&len, sizeof(len)))
        return false;
    info.date.resize(len);
    if(!file.read(&info.date[0], len))
        return false;
 
    if(!file.read((char*)&info.money, sizeof(info.money)))
        return false;
 
    return true;
}
 
int main()
{
    statement info;
    std::string operation;
    std::cin >> operation;
    if(operation == "list")
    {
        std::cout << "List file:\n";
 
        std::ifstream file("save.bin", std::ios::binary);
        if(file.is_open())
        {
            while(load_statement(file, info))
            {
                if(info.name.empty())
                    continue;
                std::cout << info.name << " " << info.surname << " " << info.date << " " << info.money << std::endl;
            }
        }
        else
        {
            std::cout << "Error open file for reading\n";
        }
    }
    if(operation == "add")
    {
        std::cout << "Input name, surname, date, money: ";
        std::cin >> info.name >> info.surname >> info.date >> info.money;
        std::ofstream file("save.bin", std::ios::app | std::ios::binary);
 
        if(!file.is_open())
        {
            std::cout << "Error open file for writing\n";
        }
        else if(!save_statement(file, info))
        {
            std::cout << "Write error\n";
        }
    }
}

Просто запомните как мантру: "Пишу код без обработки ошибок - страдаю и бегаю по форумам".

Добавлено через 1 минуту
Цитата Сообщение от zss Посмотреть сообщение
При чтении следующей структуры позиция переменной len оказывается смещена.
Смещена потому что он размер неверно указал для money (см. выше). "Граница машинного слова" тут не при чем. Он сам здесь все границы задает, т.к. пишет в файл почленно.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.04.2022, 09:03
Помогаю со студенческими работами здесь

Считывание данных из бинарного файла
Помогите,пожалуйста.Открываю для чтения Бинарный файл.В бинарном файле записано несколько матриц.Их нужно выводить в консоль.И сделать...

Считывание из текстового файла в переменную типа char[250].
С наступившим вас, уважаемые программисты! У меня TURBOC.3_0. Стоит задача считать текст из файла в переменную. Вроде все правильно...

Чтение из файла в переменную типа string
Добрый вечер! :) Вот делаю программу в одном из элементов которой нужно прочесть из файла в переменную типа string имя продукта так вот я...

Сравнить переменную типа string с содержимым файла
а как можно сравнить переменную типа string с содержимым файла?

Запись текста из файла в переменную типа string
Нужно достать из текстового файла типа .txt текст и записать его в переменную. Соблюдение всех знаков препинания и разделителей ( особенно...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
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