std::strlen în C++

Returnează lungimea unui șir C, numărând octeții până la terminatorul \0.

Sintaxă
#include <cstring>
std::size_t strlen(const char* sir);

Ce face std::strlen

În C, un șir este un tablou de char terminat cu octetul zero ('\0'). Lungimea nu este memorată nicăieri: strlen o află parcurgând șirul până la acel zero. De aceea durează proporțional cu lungimea.

Terminatorul nu este numărat. Ca la std::string::size, rezultatul este în octeți, deci diacriticele contează dublu. Mărimea tabloului (sizeof) poate fi mai mare decât lungimea textului din el.

Parametri

Parametru Descriere
sir Pointer la un șir terminat cu '\0'.

Ce returnează

Numărul de octeți dinaintea lui '\0'.

Exemple

Exemplul 1: strlen și sizeof

#include <cstdio>
#include <cstring>

int main() {
    char nume[20] = "Ana";
    const char* oras = "Iași";
    std::printf("strlen(nume) = %zu, sizeof(nume) = %zu\n", std::strlen(nume), sizeof(nume));
    std::printf("strlen(\"%s\") = %zu\n", oras, std::strlen(oras));
    std::printf("strlen(\"\") = %zu\n", std::strlen(""));
}

Rezultat

strlen(nume) = 3, sizeof(nume) = 20
strlen("Iași") = 5
strlen("") = 0

Exemplul 2: Un \0 în mijloc scurtează șirul

#include <cstdio>
#include <cstring>

int main() {
    char text[] = "Ana are mere";
    text[3] = '\0';
    std::printf("[%s], lungime %zu\n", text, std::strlen(text));
}

Rezultat

[Ana], lungime 3

Greșeli frecvente

  • Apelezi strlen pe un tablou fără '\0': funcția citește mai departe în memorie până găsește un zero (comportament nedefinit).
  • Scrii for (i = 0; i < strlen(s); ++i): lungimea se recalculează la fiecare pas și bucla devine lentă pentru texte lungi. Salvează lungimea într-o variabilă.

Comenzi înrudite

  • std::string::size: Returnează lungimea șirului în octeți; length() este exact același lucru.
  • std::strcpy: Copiază (strcpy, strncpy) sau lipește (strcat) șiruri C în tablouri de char.
  • std::string::c_str: Dă un pointer la textul șirului, terminat cu \0, pentru funcțiile care cer char* (stil C).