Zamiana napisu char na string za pomoca unique_ptr

0

siemka chciałbym zrobić takie zadanie, jednak za pomocą inteligentnych wskaźników unique_ptr:
Napisz funkcję, która w argumencie będzie miała obiekt string i zwróci zwykły wskaźnik na
nową/dynamiczną tablicę char o właściwym, najmniejszym wymiarze do przechowania ciągu
znaków z argumentu. Zadbaj o usunięcie rezerwacji we właściwym momencie.
Prosiłbym o wskazanie mojego błędy...nie wiem co robie źle jednak kompilator wywala błąd przy funkcji strcpy(nowy, napis.c_str());
oto mój kod:

#include <iostream>
#include <string>
#include <string.h>
#include<cstring>
#include<memory>

using namespace std;

unique_ptr<char> zamiana(string napis)
{
    unique_ptr<char>nowy(new char[napis.length()]);
    strcpy(nowy, napis.c_str());

    return nowy;
}

int main()
{
    string napis = "Test";

    unique_ptr<char> inteligent_char = zamiana(napis);
    cout<<*inteligent_char;
    return 0;
}

2
std::unique_ptr<char[]> zamiana(const string& napis)
{
    std::unique_ptr<char[]> nowy { new char[napis.length() + 1] };
    strcpy(nowy.get(), napis.c_str());
    return nowy;
}
0
MarekR22 napisał(a):
std::unique_ptr<char[]> zamiana(const string& napis)
{
    std::unique_ptr<char[]> nowy { new char[napis.length() + 1] };
    strcpy(nowy.get(), napis.c_str());
    return nowy;
}

okej, super, dzięki za pomoc. Wszystko działa, mam tylko pytanie skąd wzięło się to +1 przy długości?

1 użytkowników online, w tym zalogowanych: 0, gości: 1