нужно создать свою 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;
}
Понятно, почему и как это работает? Да, и не забывайте потом освобождать выделенную под новую строку память...