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

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

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

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

04.10.2015, 20:31. Просмотров 131. Ответов 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++ Пом Динамический - двумерный массив, не работает=(
C++ Почему не работает 2-мерный массив с выделением памяти?
Почему нельзя объявить динамический массив глобально C++
Динамический массив структур. Почему данные доступны после выполнения операции delete [] C++
C++ Почему если массив начинается с положительного числа, то он не суммируется в общую сумму?
Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает C++
Почему-то массив структур в классе не работает C++
C++ Не работает динамический массив
Почему, если я объявляю массив, он весит больше? C++
C++ Почему не вылетает ошибка при выделении памяти под динамический массив, размером 100 Гб?
C++ Динамический массив нулевого размера. Почему не падает программа?
Не работает динамический массив в классе: что раньше, указатель или размер? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4520 / 3858 / 1296
Регистрация: 14.04.2014
Сообщений: 15,121
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
4520 / 3858 / 1296
Регистрация: 14.04.2014
Сообщений: 15,121
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     Не работает, если массив динамический ?! Почему?
Ответ Создать тему
Опции темы

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