С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 10.03.2022
Сообщений: 33

Вывод динамического массива char

22.07.2023, 11:20. Показов 1585. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Почему в первом случае "std::cout<< название массива;" достаточно что б вывести массив а во втором он уже не выводится и мне приходится писать цикл для вывода массива, что это
В бинарном файле у меня Hello World_23. Во вложениях прикрепил фото со скрином вывода
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
#include <iostream>
#include <fstream>
int main(int argc, char* argv[])
{
    std::ifstream bin_in("in.bin", std::ios_base::binary);
    bin_in.seekg(0, SEEK_END);
    std::cout << bin_in.tellg()<<std::endl;
    int sizik = bin_in.tellg();
    char* asd = new char[sizik];
    bin_in.seekg(0, SEEK_SET);
    bin_in.read(asd, sizik);
    std::cout << asd<<std::endl;// тут выводит
    bin_in.close();
    char *ads = new char[sizik];
    for (int i = 0, j = sizik-1; i < sizik; i++, j--)
    {
       ads[i] = asd[j];
    }
    for (int i = 0; i <15; i++)// с циклом понятно, выводится
    {
        std::cout << ads[i];
    }
    std::cout << ads << std::endl;// но почему тут та не выводится))))
}
Миниатюры
Вывод динамического массива char  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.07.2023, 11:20
Ответы с готовыми решениями:

Освобождение памяти у динамического массива char
Добрый день. Имеем код: class _ArrayChar { typedef int Ivalue; typedef char* Pchar; typedef const char Cchar;

Изменения размера динамического массива char
У меня следующее недопонимание в работе с памятью: Есть допустим массив char'ов с именем array: char *array = (char *) malloc(10); ...

Удаление латинских символов из динамического массива char
Здравствуйте! При вызове функции sort1 в ведённом тексте символы латинского алфавита должны заменяться пробелами, но выходит что то не то....

8
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
22.07.2023, 11:49
Praumud, завершающий ноль должен быть у строк в стиле Си.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <fstream>
int main(int argc, char* argv[])
{
    std::ifstream bin_in("in.bin", std::ios_base::binary);
    bin_in.seekg(0, SEEK_END);
    std::cout << bin_in.tellg()<<std::endl;
    int sizik = bin_in.tellg();
    char* asd = new char[sizik + 1];
    bin_in.seekg(0, SEEK_SET);
    bin_in.read(asd, sizik);
    asd[sizik] = 0;
    std::cout << asd<<std::endl;
    bin_in.close();
    char *ads = new char[sizik + 1];
    for (int i = 0, j = sizik - 1; i < sizik; i++, j--)
    {
       ads[i] = asd[j];
    }
    ads[sizik] = 0;
 
    std::cout << ads << std::endl;
}
1
0 / 0 / 0
Регистрация: 10.03.2022
Сообщений: 33
22.07.2023, 12:07  [ТС]
Не знал, интересно).Это убрало единственное предупреждение, но по cout до сих пор не выводится(. Еще один маленький вопрос, был бы благодарен вдвойне если б ответили:
Вот у меня открыт бинарный файл "std::ifstream bin_in" я могу как-то обратиться к определенному байту как в массиве, например mas[3]- обращаюсь к четвертому
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
22.07.2023, 12:41
Цитата Сообщение от Praumud Посмотреть сообщение
но по cout до сих пор не выводится(
Прикрепите файл, из которого читаете, в архиве сюда.

Цитата Сообщение от Praumud Посмотреть сообщение
Вот у меня открыт бинарный файл "std::ifstream bin_in" я могу как-то обратиться к определенному байту как в массиве, например mas[3]- обращаюсь к четвертому
Сможете, если сделаете отображение файла в память.
Это делается платформозависимыми средствами.
CreateFileMapping в Windows
https://learn.microsoft.com/en... arge-pages
mmap в *nix
https://man7.org/linux/man-pages/man2/mmap.2.html

Также высокоуровневая функциональность для этого есть в boost:
https://www.boost.org/doc/libs... ating_file

в Qt тоже есть.
https://doc.qt.io/qt-5/qfiledevice.html#map
1
0 / 0 / 0
Регистрация: 10.03.2022
Сообщений: 33
22.07.2023, 13:34  [ТС]
Здравствуйте , сюда не принимает. выложил в гугл диск: https://drive.google.com/file/... sp=sharing
0
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
22.07.2023, 13:48
Лучший ответ Сообщение было отмечено Praumud как решение

Решение

Praumud, у вас в файле уже есть ноль. Поэтому надо так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
int main(int argc, char* argv[])
{
    std::ifstream bin_in("in.bin", std::ios_base::binary);
    bin_in.seekg(0, bin_in.end);
    std::cout << bin_in.tellg()<<std::endl;
    int sizik = bin_in.tellg();
    char* asd = new char[sizik];
    bin_in.seekg(0, bin_in.beg);
    bin_in.read(asd, sizik);
    int len = sizik - 1; // в файле уже есть свой ноль
     std::cout << asd << std::endl;
    bin_in.close();
    char *ads = new char[len + 1];
    for (int i = 0, j = len - 1; i < len; i++, j--)
    {
        ads[i] = asd[j];
    }
    ads[len] = 0;
    std::cout << ads << std::endl;
}
1
0 / 0 / 0
Регистрация: 10.03.2022
Сообщений: 33
22.07.2023, 14:35  [ТС]
Спасибо!
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
24.07.2023, 06:17
Лучший ответ Сообщение было отмечено Praumud как решение

Решение

Цитата Сообщение от Praumud Посмотреть сообщение
Вот у меня открыт бинарный файл "std::ifstream bin_in" я могу как-то обратиться к определенному байту как в массиве, например mas[3]- обращаюсь к четвертому
Почему же нет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <fstream>
 
int main()
{
    std::ifstream in {"C:\\asm\\ActDatums.bin",std::ios::binary};
    char ch {};
    const int index {4};
    in.seekg(index,std::ios::beg);
    in.get(ch);
    std::cout<<ch<<std::endl;
    return 0;
}
1
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,682
24.07.2023, 10:13
Цитата Сообщение от Praumud Посмотреть сообщение
я могу как-то обратиться к определенному байту как в массиве
Если не критичен интерфейс чтобы именно "как к элементу массива обращаться", хотя и это можно через обертку в виде класса организовать, то можно обращаться к конкретным байтам файла перемещая указатели чтения и записи (это разные указатели) функциями std::basic_istream::seekg и std::basic_ostream::seekp соответственно.

Выше insite2012 привел пример.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.07.2023, 10:13
Помогаю со студенческими работами здесь

Заполнение трехмерного динамического массива типа Char
вот само задание : Создать набор функций, позволяющих работать со школьным расписанием. Предположим, что школьник учится 5 дней в неделю...

Шаблонный класс динамического массива. Тип элементов char*
Я тут в ступоре... Вот мое полное задание: В данной лабораторной работе необходимо разработать шаблонный класс в соответствии с ...

Ошибка очистки памяти после ввода динамического массива char
Уважаемые форумчане, помогите, пожалуйста. Вроде такой темы на форуме нет. Нужно, дословно, по тексту учебной задачи: ввести строку...

Вывод динамического массива
// Импорт файла, создание массива nxm, запись данных в массив; int import_at_matr() { ifstream F; int size_mass; ...

Вывод динамического массива
Все привет! Столкнулся вот с какой проблемой: Не получается вывести результат (массив) в 2 таблицы Сама задача: Дан одномерный...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru