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

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

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

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

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

перед выполнением функции strcat() необходимо убедиться, что для переменной выделена память ну или выделено ли достаточно памяти, подскажите как это сделать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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 ...

23
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.02.2014, 20:19 #16
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
и как это сделать ?
Не знаете как из одного числа вычесть другое и получить результат?
0
Fene4ka_
91 / 91 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
24.02.2014, 20:25  [ТС] #17
Tulosba, не знаю как получить числа, которые нужно вычесть
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.02.2014, 20:47 #18
Fene4ka_, попробуйте для начала написать хотя бы минимальную программу для демонстрации желаемого. Иначе будем топтаться на месте и скатываться в УГ.
0
Fene4ka_
91 / 91 / 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);
    }
}
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
24.02.2014, 22:43 #20
Fene4ka_, Вам совсем-совсем нельзя пользоваться std::string, std::vector и прочими высокоуровневыми классами С++?
Как задача в целом сформулирована?
0
Fene4ka_
91 / 91 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
25.02.2014, 00:10  [ТС] #21
Tulosba, нельзя, и на функцию 7 строк
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 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; // Новая длина 
}
0
Fene4ka_
91 / 91 / 16
Регистрация: 24.01.2014
Сообщений: 1,215
26.02.2014, 00:38  [ТС] #23
Tulosba, если бы можно было больше строк или добавлять другие переменные, я бы сюда не писал ...
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.02.2014, 11:54 #24
Fene4ka_, попробуйте сохранять размер выделенной памяти в первых байтах блока, будет нечто паскалевских строк.
Почитайте еще вот эту тему: Как можно узнать размер выделенной динамической памяти, на которую ссылается указатель a?
1
26.02.2014, 11:54
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++
Задание было в следующем: дан вещественный двумерный массив А. Поменять местами максимальный элемент главной и побочной диагоналей с...


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

Или воспользуйтесь поиском по форуму:
24
Ответ Создать тему
Опции темы

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