strlen în C

Numără caracterele unui șir C până la terminatorul '\0', fără să-l includă.

Sintaxă
#include <string.h>
size_t strlen(const char *s);

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 strlen pe un tablou fără terminator (de exemplu umplut cu memcpy). Funcția citește mai departe în memorie până găsește un zero: comportament nedefinit.
  • Compari rezultatul cu un int negativ sau scazi două lungimi: size_t este fără semn, deci strlen(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.
Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: strlen

Ai o nelămurire despre utilizarea comenzii strlen sau 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.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.