Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Holyguner
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 45
1

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

04.10.2015, 20:31. Просмотров 826. Ответов 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;
0
Лучшие ответы (1)
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2015, 20:31
Ответы с готовыми решениями:

Почему работает динамический массив из 0 - элементов
Всем доброго времени суток! Столкнулся нечаянно с такой проблемой: создавая динамический массив из...

Создать динамический массив (Если чётных чисел больше, то массив должен быть укорочен на 2 элемента)
Создать динамический массив из 8 случайных целых чисел из отрезка и вывести его на экран . Если...

Почему двумерный динамический массив не запускается?
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;ctime&gt; using namespace std; int main() {...

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

Почему программа крашается(двумерный динамический массив)
Cам код #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include &lt;iomanip&gt; #include...

4
nmcf
6535 / 5758 / 2622
Регистрация: 14.04.2014
Сообщений: 24,498
04.10.2015, 20:45 2
Лучший ответ Сообщение было отмечено Holyguner как решение

Решение

C++
1
2
   char* cNew = new char [50];
   cNew[0] = '\0';
1
Holyguner
0 / 0 / 0
Регистрация: 17.10.2013
Сообщений: 45
04.10.2015, 20:48  [ТС] 3
и о чудо , таки заработало)) Спасибо тебе добрый человек!
0
nmcf
6535 / 5758 / 2622
Регистрация: 14.04.2014
Сообщений: 24,498
04.10.2015, 20:53 4
У тебя же в первом случае устанавливается пустая строка. Почему во втором пропустил?
0
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';   //и так тоже можно, что есть одно и тоже)
Просто я этой мелочи не знал.
0
04.10.2015, 22:26
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2015, 22:26

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

Почему мне не удается заполнить двумерный булевый динамический массив?
Кносоль разрешает ввод только трех значений. #include &lt;cstdlib&gt; #include &lt;iostream&gt; using...

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


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

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

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