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

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

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

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

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

перед выполнением функции strcat() необходимо убедиться, что для переменной выделена память ну или выделено ли достаточно памяти, подскажите как это сделать
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
some_name
Вежливость-главное оружие
221 / 221 / 55
Регистрация: 19.02.2013
Сообщений: 1,431
24.02.2014, 02:09     Выделить память перед strcat #2
присвойте указателю при инициализации NULL, а при использовании проверяйте:

C++
1
2
3
4
char * str = NULL;
if(str == NULL){
      // To do...
}
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
24.02.2014, 02:11  [ТС]     Выделить память перед strcat #3
some_name, в ситуации когда у меня в переменной типа чар хранится 4 символа (т.е. 8 байт ?), а выделено 10 байт, как узнать сколько осталось, а то вдруг мне нада вписать туда еще 2 символа, тогда ведь нада перед этим расширить ...
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.02.2014, 08:23     Выделить память перед strcat #4
Fene4ka_, узнать сколько было выделено можно путем сохранения этого размера в целочисленной переменной. Все остальные варианты не кроссплатформенны.
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
24.02.2014, 13:07  [ТС]     Выделить память перед strcat #5
Tulosba, как тогда узнать, сколько выделенно памяти под другую переменную, в которую просто приписали некоторое значение ?
C++
1
int k = (int)malloc(sizeof(char)*sizeof(word + 1));
почему в значении k хранится число 4751416, это в тот момент, когда в переменной word хранится 9 символов ?
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.02.2014, 13:11     Выделить память перед strcat #6
Fene4ka_, кто Вас научил преобразовывать результат вызова malloc к целому числу? И что Вы этим хотите сказать?
malloc возвращает адрес выделенной памяти. А нее ее размер или что-то еще.
Почитайте хотя бы описание функции перед тем как ее использовать.
http://www.cplusplus.com/reference/cstdlib/malloc/
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
24.02.2014, 13:25  [ТС]     Выделить память перед strcat #7
Добавлено через 2 минуты
Tulosba, а как тогда узнать сколько там выделилось ?
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.02.2014, 13:55     Выделить память перед strcat #8
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
а как тогда узнать сколько там выделилось ?
Выделяется столько, сколько задано в аргументе. Или не выделяется вовсе. Читайте справку, там всё написано.
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
24.02.2014, 13:59  [ТС]     Выделить память перед strcat #9
Tulosba, пожалуйста, приведите пример определения выделенной памяти, если вам не трудно ...
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.02.2014, 14:06     Выделить память перед strcat #10
C++
1
2
3
4
5
6
7
8
9
10
size_t s = 100;
int* p = static_cast<int*>(malloc(sizeof(int) * s));
if( p != 0 )
{
    // память выделена на 100 int'ов
}
else
{
   // память не удалось выделить
}
В C++ лучше пользоваться оператором new.
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
24.02.2014, 19:49  [ТС]     Выделить память перед strcat #11
Tulosba, после того как выделили память и заполнили какую-то часть, можно ли узнать ее остаток ?
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.02.2014, 19:57     Выделить память перед strcat #12
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
можно ли узнать ее остаток ?
Можно. Вычесть одно из другого.
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
24.02.2014, 20:03  [ТС]     Выделить память перед strcat #13
Tulosba, т.е. вычесть от общего объема выделенной памяти, кол-во занятой памяти в переменной ?
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.02.2014, 20:16     Выделить память перед strcat #14
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
вычесть от общего объема выделенной памяти, кол-во занятой памяти в переменной ?
да.
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
24.02.2014, 20:16  [ТС]     Выделить память перед strcat #15
Tulosba, и как это сделать ?
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.02.2014, 20:19     Выделить память перед strcat #16
Цитата Сообщение от Fene4ka_ Посмотреть сообщение
и как это сделать ?
Не знаете как из одного числа вычесть другое и получить результат?
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
24.02.2014, 20:25  [ТС]     Выделить память перед strcat #17
Tulosba, не знаю как получить числа, которые нужно вычесть
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.02.2014, 20:47     Выделить память перед strcat #18
Fene4ka_, попробуйте для начала написать хотя бы минимальную программу для демонстрации желаемого. Иначе будем топтаться на месте и скатываться в УГ.
Fene4ka_
87 / 87 / 16
Регистрация: 24.01.2014
Сообщений: 1,196
24.02.2014, 22:39  [ТС]     Выделить память перед strcat #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);
    }
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2014, 22:43     Выделить память перед strcat
Еще ссылки по теме:

Как выделить память? C++
C++ Выделить память под массив размера 2^64 байтов
Как выделить память на HEX-е C++
C++ Выделить память и скопировать в нее данные
Как выделить память с new? C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4390 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
24.02.2014, 22:43     Выделить память перед strcat #20
Fene4ka_, Вам совсем-совсем нельзя пользоваться std::string, std::vector и прочими высокоуровневыми классами С++?
Как задача в целом сформулирована?
Yandex
Объявления
24.02.2014, 22:43     Выделить память перед strcat
Ответ Создать тему
Опции темы

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