Ce face strlen
Un șir în C este un tablou de char care se termină cu caracterul nul '\0'. strlen pornește de la începutul șirului și numără caracterele până întâlnește acest terminator. Terminatorul nu este numărat.
strlen numără octeți, nu litere. În UTF-8, literele cu diacritice (ă, î, ș, ț) ocupă câte 2 octeți, deci strlen("Iași") este 5, nu 4.
Funcția parcurge tot șirul la fiecare apel (complexitate O(n)). Dacă ai nevoie de lungime într-o buclă, calculeaz-o o dată, înainte de buclă. strlen nu este același lucru cu sizeof: sizeof dă mărimea întregului tablou, inclusiv spațiul nefolosit.
Parametri
| Parametru | Descriere |
|---|---|
s |
Pointer la un șir terminat cu '\0'. Nu are voie să fie NULL. |
Ce returnează
Numărul de octeți dinaintea terminatorului, ca size_t (se afișează cu %zu).
Exemple
Exemplul 1: Lungimea unui nume
Tabloul are 20 de octeți (sizeof), dar șirul din el are doar 3 caractere (strlen).
#include <stdio.h>
#include <string.h>
int main(void) {
char nume[20] = "Ana";
printf("strlen: %zu\n", strlen(nume));
printf("sizeof: %zu\n", sizeof nume);
return 0;
}
Rezultat
strlen: 3
sizeof: 20
Exemplul 2: Diacriticele ocupă mai mulți octeți
Fișierul sursă este salvat în UTF-8, așa că „ș” din „Iași” ocupă 2 octeți.
#include <stdio.h>
#include <string.h>
int main(void) {
const char *orase[] = {"Cluj", "Iași", "Brașov"};
for (size_t i = 0; i < 3; i++) {
printf("%s: %zu octeți\n", orase[i], strlen(orase[i]));
}
return 0;
}
Rezultat
Cluj: 4 octeți
Iași: 5 octeți
Brașov: 7 octeți
Exemplul 3: Calculează lungimea o singură dată
Lungimea este salvată într-o variabilă înaintea buclei, ca șirul să nu fie parcurs din nou la fiecare pas.
#include <stdio.h>
#include <string.h>
int main(void) {
const char *text = "mere, pere, prune";
size_t lungime = strlen(text);
size_t virgule = 0;
for (size_t i = 0; i < lungime; i++) {
if (text[i] == ',') {
virgule++;
}
}
printf("Virgule: %zu\n", virgule);
return 0;
}
Rezultat
Virgule: 2
Greșeli frecvente
- Aloci exact
strlen(s)octeți pentru o copie. Mai trebuie un octet pentru'\0':malloc(strlen(s) + 1). - Apelezi
strlenpe un tablou fără terminator (de exemplu umplut cumemcpy). Funcția citește mai departe în memorie până găsește un zero: comportament nedefinit. - Compari rezultatul cu un
intnegativ sau scazi două lungimi:size_teste fără semn, decistrlen(a) - strlen(b)nu poate fi negativ, ci devine un număr foarte mare.
Comenzi înrudite
Ș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.sizeof: Operatorul care spune câți octeți ocupă un tip sau o variabilă; calculat de compilator, rezultatul are tipul size_t.strcpy, strncpy și strdup: Copiază un șir C într-un alt tablou (strcpy, strncpy) sau într-o zonă nouă alocată cu malloc (strdup).strcmp și strncmp: Compară două șiruri caracter cu caracter și spune dacă sunt egale sau care vine primul.strchr și strrchr: Caută un caracter într-un șir: strchr găsește prima apariție, strrchr pe ultima.
Întrebări & Exemple de Cod:
strlenAi o nelămurire despre utilizarea comenzii
strlensau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.