Форум программистов, компьютерный форум CyberForum.ru

Выделить память перед strcat - C++

Восстановить пароль Регистрация
 
 
Fene4ka_
84 / 84 / 16
Регистрация: 24.01.2014
Сообщений: 1,142
24.02.2014, 01:54     Выделить память перед strcat #1
перед выполнением функции strcat() необходимо убедиться, что для переменной выделена память ну или выделено ли достаточно памяти, подскажите как это сделать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2014, 01:54     Выделить память перед strcat
Посмотрите здесь:

Выделить память для трёхмерного массива C++
выделить память для массива*[] C++
C++ Как выделить память для класса
C++ выделить память под переменную
Нужно выделить память в куче C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fene4ka_
84 / 84 / 16
Регистрация: 24.01.2014
Сообщений: 1,142
25.02.2014, 00:10  [ТС]     Выделить память перед strcat #21
Tulosba, нельзя, и на функцию 7 строк
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.02.2014, 11:16     Выделить память перед strcat #22
Fene4ka_, всё таки Вам следовало тему размещать в разделе Си, раз уж стандартные классы нельзя использовать. Ограничивать размер функции кол-вом строк - это глупость (если, конечно речь не идет об удобочитаемости).
Чтобы проверять достаточно ли текущей памяти нужно передавать размер этой памяти. Мне например видится такой результирующий код:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// megastring - указатель на результирующую строку
// megalen - текущий размер результирующей строки
// word - добавляемое слово
size_t cat(char** megastring, size_t megalen, const char* word)
{
    size_t wlen = strlen(word) + 1;
    if ( megalen < wlen ) // слово не помещается
    {
        char* newmega = realloc(*megastring, wlen); // перевыделяем память
        if( newmega )
        {
            *megastring = newmega;
            megalen = wlen;
        }
        else
        {
            return 0; // Не удалось перевыделить память
        }
    }
    strcat(*megastring, word); // Добавляем слово
    return megalen; // Новая длина 
}
Fene4ka_
84 / 84 / 16
Регистрация: 24.01.2014
Сообщений: 1,142
26.02.2014, 00:38  [ТС]     Выделить память перед strcat #23
Tulosba, если бы можно было больше строк или добавлять другие переменные, я бы сюда не писал ...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 11:54     Выделить память перед strcat
Еще ссылки по теме:

C++ Динамически выделить память под массив
Не могу правильно выделить память C++
Как выделить память? C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.02.2014, 11:54     Выделить память перед strcat #24
Fene4ka_, попробуйте сохранять размер выделенной памяти в первых байтах блока, будет нечто паскалевских строк.
Почитайте еще вот эту тему: Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a?
Yandex
Объявления
26.02.2014, 11:54     Выделить память перед strcat
Ответ Создать тему
Опции темы

Текущее время: 05:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru