Проблема с копированием одного массива в другой с помощью указателей в C ++ - PullRequest
0 голосов
/ 03 июня 2019

Я студент онлайн-университета, там была лекция о копировании одного заполненного массива в другой пустой массив, я не совсем понял его, и даже по заданной строке кода я не смог получить требуемые результаты.(Обратите внимание, что в видео-лекции они не «проверяли», чтобы проверить, работает ли код)Последний вывод str2 не работает.

Ответы [ 2 ]

0 голосов
/ 03 июня 2019

Вы увеличиваете указатели и затем ожидаете, что они снова укажут на начало строки.Возможно, вы захотите снова установить указатели на начало

auto beginA = ptrA;
auto beginB = ptrB;

while(*ptrA != '\0'){
    cout << *ptrA;    // it works fine shows output
    ptrA++;
}

ptrA = beginA;  // reset to beginning, otherwise ptrA == '\0'

while(*ptrA != '\0'){
    *ptrB++ = *ptrA++;
}
*ptrB = '\0';

ptrB = beginA;

while(*ptrB != '\0'){
    cout << *ptrB;     // this doesn't show any thing and crashes
    ptrB++;
}

Обратите внимание, что в вашем коде есть

*ptrB = '\0';
while(*ptrB != '\0'){

, то есть цикл while ничего не печатал, потому что он никогда не выполнялся.То же самое для цикла, который копирует данные: после первого цикла ptrA == '\0'.

0 голосов
/ 03 июня 2019

С каждым ptrB++ вы теряете указатель на то место, с которого ptrB изначально начался. Таким образом, вы не можете использовать ptrB как во втором цикле, не сбрасывая его в начало соответствующей строки. То же относится и к ptrA:

ptrA = str1;
while(*ptrA != '\0'){
  *ptrB++ = *ptrA++;
}
*ptrB = '\0';

ptrB = str2;
while(*ptrB != '\0'){
  cout << *ptrB;
  ptrB++;
}
...