Witam,
moje pytanie jest związane z takim oto dziwnym programem (w zasadzie funkcją - nie pytajcie skąd się wzięła):
string kopiuj (string t) {
char * p;
for (int i = 0; i < t.length(); i++) {
p[i] = t[i];
}
return p;
}
Program działa, ale zdaję sobie sprawę, że nie jest on poprawnie napisany - chodzi o to, że nie podaję długości tablicy znaków char * p
, co wiąże się z tym, że nie wiadomo gdzie się ona kończy - teoretycznie może się ciągnąć w nieskończoność (poprawcie mnie jeśli nie mam racji). Podejrzewam również, że kompilator "domyśla się" na podstawie analizy pętli for, gdzie kończy się łańcuch p, po czym wstawia na jego końcu znak NULL.
Powiedzcie, czy waszym zdaniem jest to bezpieczne rozwiązanie, czy też może spowodować UB?
Jak można by inaczej kopiować nieznaną liczbę znaków z wejściowego stringa?
c_str()
niczego nie kopiujeBoth string::data and string::c_str are synonyms and return the same value.