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
strlenpe 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).