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

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

Войти
Регистрация
Восстановить пароль
 
Holyguner
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 45
#1

Не работает, если массив динамический ?! Почему? - C++

04.10.2015, 20:31. Просмотров 140. Ответов 4
Метки нет (Все метки)

Простая задача, есть текст , удалить из него набор символов, вот код - все работает ->
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
29
30
    char c[] =  "ky12345ky1234ky123ky12ky1",    //  некоторый текст
                cNew [50]="";                   //  
    char x[] =  "ky";                           //  некоторый набор символов
    int  D   =  strlen(x),
         len =  strlen(c);
    char    *pc(c), 
            *ppc(c);
    int     k_last(0),
            k_new;
    while (pc!='\0')
    {
        k_new=0;
        if (!(pc=strstr(pc, "ky")))
        {
            // заполнение остатка после последнего вхождения "ky"
            pc = &c[0];
            strncat(cNew, pc+k_last+D, len-k_last-D);
            break;
        }
        else
        {
            k_new = pc-ppc;
            strncat(cNew, 
                    k_last||k_new ? pc-(k_new-k_last)+D : pc-k_new,
                    k_last||k_new ? k_new-k_last-D : k_new);
            pc+=D;
            k_last=k_new;
        }
    }
    puts(cNew);
И не могу понять что происходит если массивы динамические ? Ошибки ... бред((
<<ConsoleApplication1.exe вызвал срабатывание точки останова>>РРРРРрррррррррррр!ААаа!
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
29
30
31
32
    char c[] =  "ky12345ky1234ky123ky12ky1";    //  некоторый текст
    char* cNew = new char [50];                 //  
    char x[] =  "ky";                           //  некоторый набор символов
    int  D   =  strlen(x),
         len =  strlen(c);
    char    *pc(c), 
            *ppc(c);
    int     k_last(0),
            k_new;
    while (pc!='\0')
    {
        k_new=0;
        if (!(pc=strstr(pc, "ky")))
        {
            // заполнение остатка после послетнего вхождения "ky"
            pc = &c[0];
            strncat(cNew, pc+k_last+D, len-k_last-D);
            break;
        }
        else
        {
            k_new = pc-ppc;
            strncat(cNew, 
                    k_last||k_new ? pc-(k_new-k_last)+D : pc-k_new,
                    k_last||k_new ? k_new-k_last-D : k_new);
            pc+=D;
            k_last=k_new;
        }
    }
    puts(cNew);
    delete []cNew;
    cNew = nullptr;
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2015, 20:31     Не работает, если массив динамический ?! Почему?
Посмотрите здесь:

Почему нельзя объявить динамический массив глобально - C++
вот код #include &lt;iostream&gt; #include &lt;string&gt; int w = 0; string *s = new string ; using namespace std; int main { ...

Динамический массив нулевого размера. Почему не падает программа? - C++
char* p = new char; cout &lt;&lt; &amp;p &lt;&lt; endl; Странно, но всё работает. Хотя если зададим отрицательный размер массива char* p = new char;...

Не работает динамический массив - C++
В массиве всегда один элемент. Что я делаю не так? int *p; p = new int ; p = 1; //в watch p = 1 p = 2; //в watch все равно в...

Динамический массив структур. Почему данные доступны после выполнения операции delete [] - C++
Всем привет! Выполнил вот такое задание. После того как вывелись данные трех структур, очищаю выделенную область памяти оператором delete...

Пом Динамический - двумерный массив, не работает=( - C++
//--------------------------------------------------------------------------- // Дана целочисленная квадратная матрица. Определить сумму...

Почему не вылетает ошибка при выделении памяти под динамический массив, размером 100 Гб? - C++
Здравствуйте, знатоки! Столкнулся с проблемой выделения памяти под динамические массивы. При создании массива более программа вылетает...

Почему не работает цикл [B]do{}while(.)[/B], если вводить строку с пробелом? - C++
Доброго времени суток! Рассматриваю пример из книги Лафоре (ниже). Программа как бы работает, но если вводить имя из двух слов(Имя...

Не работает динамический массив в классе: что раньше, указатель или размер? - C++
Подскажите пожалуйста где ошибка class arar { int*arr, size; public: arar() :arr(new int()), size(10) { for (int i(0); i...

Почему, если я объявляю массив, он весит больше? - C++
задаю массив char*array = new char; а в оперативе массив занимает 4 килобайта. почему так происходит, и как такого избежать? ...

Почему если массив начинается с положительного числа, то он не суммируется в общую сумму? - C++
#include &lt;iostream&gt; using namespace std; int main() { setlocale( LC_ALL,&quot;Russian&quot; ); cout&lt;&lt;&quot;Введите размер...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
5119 / 4439 / 1476
Регистрация: 14.04.2014
Сообщений: 17,608
04.10.2015, 20:45     Не работает, если массив динамический ?! Почему? #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
   char* cNew = new char [50];
   cNew[0] = '\0';
Holyguner
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 45
04.10.2015, 20:48  [ТС]     Не работает, если массив динамический ?! Почему? #3
и о чудо , таки заработало)) Спасибо тебе добрый человек!
nmcf
5119 / 4439 / 1476
Регистрация: 14.04.2014
Сообщений: 17,608
04.10.2015, 20:53     Не работает, если массив динамический ?! Почему? #4
У тебя же в первом случае устанавливается пустая строка. Почему во втором пропустил?
Holyguner
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 45
04.10.2015, 22:26  [ТС]     Не работает, если массив динамический ?! Почему? #5
а я пробовал делать так -->
C++
1
cNew = ""; // не работает((
Оказалось после объявления необходимо инициализировать динамический массив char -> '\0'

C++
1
2
cNew[0] = '\0'; // как сделал ты)
*cNew = '\0';   //и так тоже можно, что есть одно и тоже)
Просто я этой мелочи не знал.
Yandex
Объявления
04.10.2015, 22:26     Не работает, если массив динамический ?! Почему?
Ответ Создать тему
Опции темы

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