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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.67
Del_Piero_10
Smart is the new Sexy
25 / 25 / 1
Регистрация: 29.12.2008
Сообщений: 109
#1

Вопрос о динамическом выделении памяти для строки - C++

22.01.2009, 20:24. Просмотров 1509. Ответов 16
Метки нет (Все метки)

Как можно реализовать динамическое выделение для строки, т.е. например у меян есть указатель - char *c. Мне необходимо ввести строку с клавиатуры, выделить для нее память через указатель с и занести ее в эту память. Как это можно реализовать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.01.2009, 20:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вопрос о динамическом выделении памяти для строки (C++):

Вопрос о динамическом выделении памяти - C++
Доброго времени суток всем. у меня вопрос к работе следующего кода: delete values; // Удаляем массив из кучи ...

Ошибка на динамическом выделении памяти - C++
программа ниже безупречно выполнялась под С++Builder 6.0 (консольное приложение). При переводе ее в VC6.0 (кроме сделанных исправлений -...

Немного о динамическом выделении памяти ... - C++
объявление данных в классе: class Employee {.......... private: char *firstName; char *lasrName; }

Ошибка при динамическом выделении памяти - C++
Я не понимаю почему, но почему-то пример по динамическому выделению памяти, взятый с этой веб-страницы: http://cppstudio.com/post/9555/...

Ошибка при динамическом выделении памяти - C++
почему у меня возникет ошибка вот тут struct TOVAR *New = new struct TOVAR; пишит недопустимый неполный тип на struct подчеркивает...

Создание исключения при динамическом выделении памяти - C++
Вот код из учебника в нем мне все понятно. #include<iostream> #include<cstdlib> //exit() #include<new> using std::cout;using...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
22.01.2009, 20:30 #2
выдели дин. память для символьного массива

Добавлено через 1 минуту 14 секунд
char* array = new char[размер массива];
0
Del_Piero_10
Smart is the new Sexy
25 / 25 / 1
Регистрация: 29.12.2008
Сообщений: 109
22.01.2009, 20:37  [ТС] #3
Я ведь не знаю еще размер строки, которую введут. Как я могу выделить память?
0
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
22.01.2009, 20:41 #4
запроси у пользователя
0
Del_Piero_10
Smart is the new Sexy
25 / 25 / 1
Регистрация: 29.12.2008
Сообщений: 109
22.01.2009, 20:46  [ТС] #5
Нее... Это неинтересно.
0
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
22.01.2009, 20:52 #6
ну тогда используй string
0
Del_Piero_10
Smart is the new Sexy
25 / 25 / 1
Регистрация: 29.12.2008
Сообщений: 109
22.01.2009, 21:11  [ТС] #7
Конкретный ответ есть?
0
Бартимеус
181 / 33 / 2
Регистрация: 29.10.2008
Сообщений: 283
22.01.2009, 21:15 #8
Цитата Сообщение от Del_Piero_10 Посмотреть сообщение
Конкретный ответ есть?
а чем этот не устраивает? подключи <string> и юзай
0
Del_Piero_10
Smart is the new Sexy
25 / 25 / 1
Регистрация: 29.12.2008
Сообщений: 109
22.01.2009, 21:30  [ТС] #9
Блиин... В обще нужна символьная строка. Я вроде дал толковое определение того, что меня интересует. Жду еще овтетов.
0
Vourhey
Почетный модератор
6482 / 2257 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.01.2009, 21:42 #10
Ты не можешь определить размер того, чего у тебя еще нет. Твоя прога не прочитала строку? Нет. Вот и не пытайся узнать размер того, о существовании чего твоя прога еще даже не знает.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
22.01.2009, 23:41 #11
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
25
26
27
28
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define MAXLINE  1000   /* максимальная длина строки */
 
/* выделяет память для введённой строки */
main()
{
    char *s;
    unsigned len;
    
    if ((s = (char *) malloc(MAXLINE)) == NULL)
        return 1;
    if (fgets(s, MAXLINE, stdin) == NULL) {
        free((void *) s);
        return 2;
    }    
    if ((len = strlen(s)) < MAXLINE-1)
        if (realloc((void *) s, len+1) == NULL) {
            free((void *) s);
            return 3;
        }
    printf("%s", s);
    free((void *) s);
    return 0;    
}
суть в том, что сначала записываешь её в большой массив а потом его ужимаешь
0
Vourhey
Почетный модератор
6482 / 2257 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
22.01.2009, 23:46 #12
accept, он же ясно написал, что ему не нужен большой массив. а выделение памяти под точное число символов в строке. это не решение.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.01.2009, 00:27 #13
в итоге остаётся выделенная память под точное число символов в строке там realloc
0
Vourhey
Почетный модератор
6482 / 2257 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
23.01.2009, 00:33 #14
Цитата Сообщение от accept Посмотреть сообщение
в итоге остаётся выделенная память под точное число символов в строке там realloc
Блин, да понимаю я это. Но это не решение поставленной задачи.
Тебе по слогам формулировать то, что людям нужно?
Человек хочет выделить память под строку по ее длине сразу же. Не используя левых выделений, реалоков и т. д..
Описываю:
1. пользователь ввел на терминал строку
2. прога определила длину введенной строки
3. выделила память по длине.
4. считала строку с терминала в этот буфер.
Вроде, я верно понял.
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
23.01.2009, 01:01 #15
я сделал так чтобы у него память тратилась только под строку, получилась буферизация внутри программы, а ты предлагаешь использовать внешнюю буферизацию, итого получается зависимость от внешней буферизации (получение доступа к внешнему буферу куда строка записалась может варьироваться)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.01.2009, 01:01
Привет! Вот еще темы с ответами:

Cin.getline() не работает при динамическом выделении памяти - C++
Почему в таком коде cin.getline() работает не так как надо? Если очистить поток, то будет все нормально. #include &lt;iostream&gt; using...

Выравнивание при динамическом выделении памяти под массив - C++
Добрый вечер. Для того, чтобы выделить память под массив динамически и выровнять указатель по 16 байтам, в разных ОС существуют разные...

Использование конструктора базового класса при динамическом выделении памяти - C++
Есть базовый класс, от него наследуются несколько классов, свой конструктор я определил в базовом классе. Далее нужно сделать так:parent...

Ошибка при динамическом выделении двумерного массива char - C++
Ребята, спасите-помогите. Нужно выделить двумерный массив типа char для игрового поля. Выделяю вроде бы как положено, но получаю рантайм...


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

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

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