Ce face strcat și strncat
strcat(dest, src) caută terminatorul lui dest și copiază acolo caracterele lui src, plus un nou '\0'. dest trebuie să conțină deja un șir valid (cel puțin "") și să aibă loc pentru ambele șiruri.
strncat(dest, src, n) adaugă cel mult n caractere din src și pune întotdeauna terminatorul. Atenție: n nu este mărimea lui dest, ci câte caractere mai adaugi. Spațiul liber este sizeof dest - strlen(dest) - 1.
Fiecare apel caută din nou sfârșitul lui dest, deci multe apeluri pe un șir lung sunt lente. Pentru texte compuse din mai multe bucăți, snprintf este de obicei mai clar.
Parametri
| Parametru | Descriere |
|---|---|
dest |
Tablou cu un șir terminat în '\0', cu spațiu liber după el. |
src |
Șirul adăugat. |
n |
La strncat: numărul maxim de caractere adăugate (fără terminator). |
Ce returnează
Pointerul dest.
Exemple
Exemplul 1: Construirea unei adrese
#include <stdio.h>
#include <string.h>
int main(void) {
char adresa[64] = "Str. Lăpușneanu";
strcat(adresa, ", ");
strcat(adresa, "Iași");
printf("%s\n", adresa);
return 0;
}
Rezultat
Str. Lăpușneanu, Iași
Exemplul 2: strncat cu spațiul rămas calculat corect
Bufferul are 12 octeți. După „Ana ” mai sunt 7 locuri pentru caractere (al 12-lea octet este pentru terminator), deci numele este tăiat.
#include <stdio.h>
#include <string.h>
int main(void) {
char salut[12] = "Ana ";
size_t liber = sizeof salut - strlen(salut) - 1;
strncat(salut, "Mariaaaaaaaaa", liber);
printf("[%s] (%zu caractere)\n", salut, strlen(salut));
return 0;
}
Rezultat
[Ana Mariaaa] (11 caractere)
Greșeli frecvente
- Folosești
strcatpe un tablou neinițializat:char s[20]; strcat(s, "x");. Nu există un terminator de la care să înceapă; inițializează cuchar s[20] = "";. - Pui la
strncatmărimea tabloului (sizeof dest). Dacă tabloul are deja text, depășești spațiul. - Lipești un șir la el însuși (
strcat(s, s)): zonele se suprapun și rezultatul este nedefinit.
Comenzi înrudite
strcpy, strncpy și strdup: Copiază un șir C într-un alt tablou (strcpy, strncpy) sau într-o zonă nouă alocată cu malloc (strdup).strlen: Numără caracterele unui șir C până la terminatorul ‘\0’, fără să-l includă.snprintf și sprintf: Formatează text ca printf, dar îl scrie într-un tablou de caractere; snprintf nu depășește niciodată dimensiunea dată.Șiruri de caractere (char[]): În C, un șir de caractere este un tablou de char terminat cu caracterul nul ‘\0’, care marchează sfârșitul textului.