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

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

Восстановить пароль Регистрация
 
Holyguner
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 45
04.10.2015, 20:31     Не работает, если массив динамический ?! Почему? #1
Простая задача, есть текст , удалить из него набор символов, вот код - все работает ->
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)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4315 / 3736 / 1259
Регистрация: 14.04.2014
Сообщений: 14,642
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
4315 / 3736 / 1259
Регистрация: 14.04.2014
Сообщений: 14,642
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     Не работает, если массив динамический ?! Почему?
Ответ Создать тему
Опции темы

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