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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Fene4ka_
89 / 89 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
#1

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

24.02.2014, 01:54. Просмотров 753. Ответов 23
Метки нет (Все метки)

перед выполнением функции strcat() необходимо убедиться, что для переменной выделена память ну или выделено ли достаточно памяти, подскажите как это сделать
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2014, 01:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выделить память перед strcat (C++):

Как выделить память? - C++
Нужно заполнить треугольную матрицу вида 1 1 1 1 1 - 1 - - На элементы с "-" память не должна выделяться. ...

Как выделить память с new? - C++
struct stat *buf; Как для структуры выделить память? Много способов перепробовал, но выдает ошибку. Добавлено через 3...

Выделить память под переменную - C++
объявляет переменные и выделяет память под них как в с++ ?? обьявить переменную и выделить ей память?

Нужно выделить память в куче - C++
Работаю с довольно большим объемом данных, записанных матрицей. Для этого нужно выделить память в куче. правильно ли я это делаю: int...

выделить память для массива*[] - C++
привет. чего-то не получается организовать работу массива char *c; это динамический массив строк длиной 10 при конструкторе ...

Как выделить память на HEX-е - C++
http://www.cyberforum.ru/attachment.php?attachmentid=578800&stc=1&d=1443205705 ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.02.2014, 20:19 #16
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
и как это сделать ?
Не знаете как из одного числа вычесть другое и получить результат?
Fene4ka_
89 / 89 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
24.02.2014, 20:25  [ТС] #17
Tulosba, не знаю как получить числа, которые нужно вычесть
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.02.2014, 20:47 #18
Fene4ka_, попробуйте для начала написать хотя бы минимальную программу для демонстрации желаемого. Иначе будем топтаться на месте и скатываться в УГ.
Fene4ka_
89 / 89 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
24.02.2014, 22:39  [ТС] #19
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void cpy(char** list, char* word)
{
    if (*list == NULL)
    {
        //*list = (char*)malloc(sizeof(char)*sizeof(word+1));
        *list = (char*)malloc(strlen(word));
        strcpy(*(list), word);
    }
    else
        strcpy(*(list), word);
}
 
void cat(char** list, char* word)
{
    if (тут должны убедиться, что в list хватает памяти ...)
        strcat(*(list), word);
    else
    {
        realloc(list, sizeof(char)*strlen(word));
        strcat(*(list), word);
    }
}
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.02.2014, 22:43 #20
Fene4ka_, Вам совсем-совсем нельзя пользоваться std::string, std::vector и прочими высокоуровневыми классами С++?
Как задача в целом сформулирована?
Fene4ka_
89 / 89 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
25.02.2014, 00:10  [ТС] #21
Tulosba, нельзя, и на функцию 7 строк
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.02.2014, 11:16 #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_
89 / 89 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
26.02.2014, 00:38  [ТС] #23
Tulosba, если бы можно было больше строк или добавлять другие переменные, я бы сюда не писал ...
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.02.2014, 11:54 #24
Fene4ka_, попробуйте сохранять размер выделенной памяти в первых байтах блока, будет нечто паскалевских строк.
Почитайте еще вот эту тему: Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.02.2014, 11:54
Привет! Вот еще темы с ответами:

Не могу правильно выделить память - C++
Прошу помощи #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;windows.h&gt; #include &lt;memory.h&gt; #include...

Как выделить память для класса - C++
Привет, я пишу библиотеку управления памятью. На данный момент я выделяю память вот так void * __cdecl MyAlloc(size_t size) { void *...

Выделить память и скопировать в нее данные - C++
Всем здравствуйте. Необходимо выделить память размера newSize, скопировать в нее данные из переданной области памяти, освободить старую...

Динамически выделить память под массив - C++
Задание было в следующем: дан вещественный двумерный массив А. Поменять местами максимальный элемент главной и побочной диагоналей с...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.02.2014, 11:54
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru