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

выделение памяти char* - C++

Восстановить пароль Регистрация
 
PakistanCode
2 / 2 / 0
Регистрация: 05.02.2013
Сообщений: 175
18.07.2013, 01:56     выделение памяти char* #1
Подскажите пожалуйста как реализовать следующее:
Человек вводит что-то с клавиатуры (строку и т.п.)

И когда ему надоедает - нажимает enter - этим и завершает ввод строки.
Проблема в следующем - нужно всё сделать своими функциями.
Подскажите пожалуйста как примерно это реализовать?

Я думал делать что-то типа:

ввод одной буквы
создание новой строки[текущая длина + 1]
копирование старой строки + запись новой буквы


Подскажите пожалуйста есть ли более умное решение?
Ещё раз - string и т.п. нельзя использовать, только своими руками.

Подскажите пожалуйста с помощью каких функций алгоритм можно сделать наиболее понятным и коротким

Добавлено через 26 минут
Подскажите где тут мог ошибиться
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    void findSubsting()
    {
        char temp = 0;
        char* subString_ = '\0';
 
        int i = 0;
        while (temp != '\n')
        {
            subString_ = new char[i++];
            _memccpy(&subString_, &subString_, i-1,sizeof(subString_)-sizeof(subString_[0]));
            subString_[i] = '\0';
            subString_[i - 1] = temp;
        }
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2013, 01:56     выделение памяти char*
Посмотрите здесь:

Выделение памяти C++
C++ выделение памяти
Выделение памяти C++
До выделение памяти в С++ C++
Выделение динамической памяти для char[n]* C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
EnRJ
1 / 1 / 0
Регистрация: 17.07.2013
Сообщений: 9
18.07.2013, 02:14     выделение памяти char* #2
Я думаю что разумнее создать буфер на N символов, или может я неправильно понял задания..

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
void main()
{
    char *str, buf[512];
    gets(buf);
    str = new char [strlen(buf)];
    for(int i=0;i<strlen(buf);i++)
    {
        str[i] = buf[i];
        cout << str[i];
    }
    cout << endl;
}
PakistanCode
2 / 2 / 0
Регистрация: 05.02.2013
Сообщений: 175
18.07.2013, 02:22  [ТС]     выделение памяти char* #3
EnRJ, спасибо, очень помогли

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
        char *subStr_, buf[512];
        gets_s(buf,512);
 
        subStr_ = new char[strlen(buf)];
        for (int i = 0; i < strlen(buf); i++)
            subStr_[i] = buf[i];
 
        delete [] buf;
    }
последний вопрос - почему вылетает на строчке delete[] buf?
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
18.07.2013, 02:25     выделение памяти char* #4
PakistanCode, потому что buf создан в стеке.
C++
1
delete[] subStr_;
PakistanCode
2 / 2 / 0
Регистрация: 05.02.2013
Сообщений: 175
18.07.2013, 02:28  [ТС]     выделение памяти char* #5
Olivеr, Спасибо)!
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 02:30     выделение памяти char* #6
C++
1
2
3
4
5
6
7
8
9
10
11
char *subStr_, buf[512];
gets_s(buf, 512);
 
subStr_ = new char[strlen(buf) + 1];
    
for (int i = 0; i <= strlen(buf); i++)
    subStr_[i] = buf[i];
 
cout << subStr_ << endl;
   
delete [] subStr_;
EnRJ
1 / 1 / 0
Регистрация: 17.07.2013
Сообщений: 9
18.07.2013, 02:36     выделение памяти char* #7
Цитата Сообщение от PakistanCode Посмотреть сообщение
EnRJ, спасибо, очень помогли

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
        char *subStr_, buf[512];
        gets_s(buf,512);
 
        subStr_ = new char[strlen(buf)];
        for (int i = 0; i < strlen(buf); i++)
            subStr_[i] = buf[i];
 
        delete [] buf;
    }
последний вопрос - почему вылетает на строчке delete[] buf?
а delete[] buf не имеет смысла т.к. это статический объект, вы же не выделяете под него память..
за вас это делает класс char... чтобы заработала надо делать что-то типа
C++
1
2
int bufSIZE = 512;
char * buf = new char[bufSIZE];
Добавлено через 3 минуты
Цитата Сообщение от Olivеr Посмотреть сообщение
PakistanCode, потому что buf создан в стеке.
C++
1
delete[] subStr_;
Так если он удалит свой массив, как он с ним далее будет работать?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 02:43     выделение памяти char* #8
EnRJ, вы сделайте в своём коде:
C++
1
cout << str << endl;
и посмотрите на результат.

Добавлено через 2 минуты
Цитата Сообщение от EnRJ Посмотреть сообщение
Так если он удалит свой массив, как он с ним далее будет работать?
Подразумевается, что когда не нужен будет.
EnRJ
1 / 1 / 0
Регистрация: 17.07.2013
Сообщений: 9
18.07.2013, 02:45     выделение памяти char* #9
Цитата Сообщение от alsav22 Посмотреть сообщение
EnRJ, вы сделайте в своём коде:
C++
1
cout << str << endl;
и посмотрите на результат.
Спасибо буду знать..(Век живи, век учись...)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2013, 06:43     выделение памяти char*
Еще ссылки по теме:

выделение динамической памяти для char C++
C++ Динамическое выделение памяти для массива указателей на char
ООП Классы. Выделение памяти под строку char* C++

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

Или воспользуйтесь поиском по форуму:
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 06:43     выделение памяти char* #10
C++
1
2
3
4
5
6
7
8
9
10
char *str, buf[512];
gets(buf);
str = new char [strlen(buf) + 1]; // добавить для '\0'
for(int i = 0; i <= strlen(buf); i++) // чтобы записался '\0', делаем <=
{
     str[i] = buf[i];
     if (buf[i]) cout << str[i]; // чтобы не выводился '\0'
}
cout << endl;
cout << str << endl;
Yandex
Объявления
18.07.2013, 06:43     выделение памяти char*
Ответ Создать тему
Опции темы

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