нужно создать свою strcat , ошибка нарушения доступа для чтения

Пытаюсь постичь указатели. Нужно написать функцию, которая бы работала, как strcat, но случается ошибка нарушения доступа для чтения wtf[n] = ptr1[n], и поскольку я еще очень плохо разбираюсь во всем этом, то не получается самостоятельно ее устранить.

#include <iostream>

char* my_strconcat(const char* ptr1, const char* ptr2)
{
    char *wtf = new char[40];
    int n = 0;
    while (ptr1)
    {
        wtf[n] = ptr1[n];
        ptr1++;
        n++;
    }
    while (ptr2)
    {
        wtf[n] = ptr2[n];
        ptr2++;
        n++;
    }
    return wtf;

}

int main()
{
    const int len = 20;
    char str[len];
    char str1[len];
    std::cout << "Text 1 ";
    std::cin.getline(str, len);
    std::cout << "Text 2 ";
    std::cin.getline(str1, len);
    char *zahl = my_strconcat(str, str1);
    std::cout << zahl;

}

Ответы (1 шт):

Автор решения: Harry

Начать с того, что на самом деле исходная функция добавляет вторую строку к первой, а ваша - возвращает новую строку, составленную из двух...

Ну да ладно. Но кто же так работает с указателями? Тогда уж так:

char* my_strconcat(const char* ptr1, const char* ptr2)
{
    char *wtf = new char[40];  // А хватит ли - 40?
    int n = 0;
    while(*ptr1) wtf[n++] = *ptr1++;
    while(*ptr2) wtf[n++] = *ptr2++;
    wtf[n] = 0;
    return wtf;
}

Понятно, почему и как это работает? Да, и не забывайте потом освобождать выделенную под новую строку память...

→ Ссылка