Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
1

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

18.07.2013, 01:56. Просмотров 5533. Ответов 9
Метки нет (Все метки)

Подскажите пожалуйста как реализовать следующее:
Человек вводит что-то с клавиатуры (строку и т.п.)

И когда ему надоедает - нажимает 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;
        }
    }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2013, 01:56
Ответы с готовыми решениями:

Выделение динамической памяти для char
Здравствуйте, возник вопрос: как выделить память для char массива? Вот, что делаю я: #include...

Выделение динамической памяти для char[n]*
Есть количество цитат (quote), которые должны быть типа char* Есть переменная с колличеством цитат...

Классы. Выделение памяти под Char
Программа завершает работу не давая ввести данные "Customer" методом introData(). Подозреваю, что ...

Выделение памяти под динамический массив char
Здравствуйте, код: #include "pch.h" #include <iostream> using namespace std; struct train...

9
1 / 1 / 0
Регистрация: 17.07.2013
Сообщений: 9
18.07.2013, 02:14 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;
}
0
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
18.07.2013, 02:22  [ТС] 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?
0
413 / 409 / 95
Регистрация: 06.10.2011
Сообщений: 832
18.07.2013, 02:25 4
PakistanCode, потому что buf создан в стеке.
C++
1
delete[] subStr_;
1
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
18.07.2013, 02:28  [ТС] 5
Olivеr, Спасибо)!
0
5475 / 4870 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 02:30 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_;
0
1 / 1 / 0
Регистрация: 17.07.2013
Сообщений: 9
18.07.2013, 02:36 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_;
Так если он удалит свой массив, как он с ним далее будет работать?
0
5475 / 4870 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 02:43 8
EnRJ, вы сделайте в своём коде:
C++
1
cout << str << endl;
и посмотрите на результат.

Добавлено через 2 минуты
Цитата Сообщение от EnRJ Посмотреть сообщение
Так если он удалит свой массив, как он с ним далее будет работать?
Подразумевается, что когда не нужен будет.
1
1 / 1 / 0
Регистрация: 17.07.2013
Сообщений: 9
18.07.2013, 02:45 9
Цитата Сообщение от alsav22 Посмотреть сообщение
EnRJ, вы сделайте в своём коде:
C++
1
cout << str << endl;
и посмотрите на результат.
Спасибо буду знать..(Век живи, век учись...)
0
5475 / 4870 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
18.07.2013, 06:43 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;
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2013, 06:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Динамическое выделение памяти под массив char
Здравствуйте. Мне нужен массив символов и я выделяю память так: char* ch = new char; ...

Динамические выделение памяти и инициализация для char*
MrGluck, как правильней?#define _CRT_SECURE_NO_WARNINGS #include &lt;iostream&gt; #include &lt;cstring&gt;...

Динамическое выделение памяти для массива указателей на char
Доброго времени суток! пытаюсь выделить память для массива указателей на char следующий код...

ООП Классы. Выделение памяти под строку char*
Делал программу на освоение классов и тд. и наткнулся на такую вот штуку.При вводе с клавиатуры...


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

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

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