Ce face std::string::copy
s.copy(buf, n, poz) copiază în tabloul buf cel mult n caractere, începând de la poziția poz. Returnează câte caractere a copiat efectiv.
Nu pune '\0' la final, așa că, dacă vrei să folosești buf ca șir C, adaugi tu terminatorul la poziția returnată. Nu confunda cu copierea unui șir întreg, care se face simplu cu =.
Parametri
| Parametru | Descriere |
|---|---|
destinatie |
Tabloul de char în care se copiază; trebuie să aibă loc pentru n caractere. |
n |
Numărul maxim de caractere copiate. |
poz |
Poziția de început în șir. |
Ce returnează
Numărul de caractere copiate.
Exemple
Exemplul 1: Copierea într-un tablou de lungime fixă
#include <cstdio>
#include <string>
int main() {
std::string nume = "Popescu Ana Maria";
char scurt[8];
std::size_t copiate = nume.copy(scurt, sizeof(scurt) - 1); // lăsăm loc pentru '\0'
scurt[copiate] = '\0';
std::printf("[%s] (%zu caractere)\n", scurt, copiate);
char prenume[4];
copiate = nume.copy(prenume, 3, 8);
prenume[copiate] = '\0';
std::printf("[%s]\n", prenume);
}
Rezultat
[Popescu] (7 caractere)
[Ana]
Greșeli frecvente
- Uiți
'\0'dupăcopyși afișezi tabloul cuprintf("%s"): se citesc octeți străini până la primul zero întâlnit. - Dai un
nmai mare decât tabloul destinație: scrii în afara lui (comportament nedefinit).
Comenzi înrudite
std::string::c_str: Dă un pointer la textul șirului, terminat cu \0, pentru funcțiile care cer char* (stil C).std::strcpy: Copiază (strcpy, strncpy) sau lipește (strcat) șiruri C în tablouri de char.std::memcpy: Copiază n octeți dintr-o zonă de memorie în alta; memmove permite zone suprapuse.std::string::substr: Returnează o bucată nouă din șir: n caractere începând de la poziția poz.