strlen() vs. sizeof() em C: Entendendo Diferenças e Uso Correto
O que é strlen()
Em C, strlen() retorna o número de caracteres em uma string terminada em nulo, excluindo o terminador '\0'. Ela conta caracteres alfabéticos, dígitos, símbolos e espaços.
Este artigo explica o papel de strlen(), sizeof() e por que eles se comportam de forma diferente.
- Definição de
strlen() - Definição de
sizeof() - Exemplos de sintaxe
- Diferenças principais
O que é sizeof()
O operador sizeof retorna o tamanho, em bytes, de seu operando. É avaliado em tempo de compilação para tipos estáticos e em tempo de execução para arrays de comprimento variável. Aplica-se a todos os tipos de dados C, incluindo primitivos, ponteiros, structs e uniões. O resultado é do tipo size_t, um tipo inteiro sem sinal garantidamente grande o suficiente para conter o tamanho do maior objeto.
Como o tamanho de tipos como int ou double pode variar entre sistemas de 32 e 64 bits, sizeof garante portabilidade.
Diferenças Principais
strlen()mede o número de caracteres em uma string;sizeof()mede a memória ocupada por uma variável ou tipo.- Apenas
strlen()considera o terminador'\0'da string;sizeof()ignora o conteúdo. - O tipo de retorno de
strlen()ésize_t(comumente inteiro sem sinal de 64 bits em sistemas modernos);sizeof()também retornasize_t. strlen()é uma função de tempo de execução definida emstring.h;sizeofé um operador unário de tempo de compilação.- Apenas
strlen()opera em arrays de caracteres;sizeoffunciona com qualquer tipo.
Sintaxe de strlen()
size_t comprimento = strlen(minha_string);
Aqui, minha_string é um array de caracteres ou ponteiro para uma string terminada em nulo.
Exemplo de strlen()
#include <stdio.h>
#include <string.h>
int main() {
char strng[] = "January";
printf("Comprimento da string dada é: %zu\n", strlen(strng));
return 0;
}
Saída:
Comprimento da string dada é: 7
Sintaxe de sizeof()
1) sizeof(tipo)
sizeof(tipo) retorna o tamanho do tipo especificado.
#include <stdio.h>
#define meu_sizeof(tipo) ((char*)(&tipo+1) - (char*)&tipo)
int main() {
double x;
printf("%zu", meu_sizeof(x));
return 0;
}
Saída:
8
2) sizeof(variável)
Passe um nome de variável para obter sua pegada de memória.
#include <stdio.h>
int main() {
printf("sizeof(char) = %zu\n", sizeof(char));
return 0;
}
Saída:
sizeof(char) = 1
3) sizeof(expressão)
Avalia o tamanho do tipo de uma expressão sem calcular seu valor.
#include <stdio.h>
int main() {
char p = 'S';
double q = 4.65;
printf("Tamanho da variável p: %zu\n", sizeof(p));
printf("Tamanho de uma expressão: %zu\n", sizeof(p+q));
int a = (int)(p+q);
printf("Tamanho de expressão convertida explicitamente: %zu\n", sizeof(a));
return 0;
}
Saída:
Tamanho da variável p: 1 Tamanho de uma expressão: 8 Tamanho de expressão convertida explicitamente: 4
Comparação Visual

Abaixo está um resumo lado a lado dos dois construtos.
| Característica | strlen() | sizeof() |
|---|---|---|
| Arquivo de header | string.h | Nenhum necessário (operador embutido) |
| Propósito | Calcular comprimento da string (excluindo nulo) | Determinar tamanho de memória de tipo ou variável |
| Tipo de retorno | size_t | size_t |
| Tempo de avaliação | Tempo de execução (pode percorrer a string) | Tempo de compilação (exceto VLA) |
| Aplicável a | Apenas arrays de caracteres ou ponteiros para strings terminadas em nulo | Todos os tipos de dados e expressões |
Quando Usar Qual
- Use
strlen()quando precisar do comprimento lógico de uma string, como para alocação de buffer, extração de substring ou validação de entrada. - Use
sizeof()quando precisar do tamanho físico de um tipo de dado ou variável, por exemplo, ao copiar memória commemcpyou alocar um bloco de memória para um array de structs. - Lembre-se que
sizeof(char)é sempre 1 byte, que é a unidade base de memória em C. - Para literais de string,
sizeof("hello")resulta em 6 (cinco caracteres mais o terminador nulo), enquantostrlen("hello")resulta em 5.
Seguir estas diretrizes garante código C eficiente, portável e de fácil manutenção.
Linguagem C
- Amianto vs. Fibra de Vidro: Diferenças-Chave, Usos e Considerações de Segurança
- Structs vs. Unions em C: Guia Prático
- C# vs C++: Comparação Clara de Recursos, Desempenho e Casos de Uso
- C vs. C++: Principais Diferenças e Quando Escolher Cada Um
- C vs Java: Comparação Abrangente de Recursos, História e Aplicações
- Python vs JavaScript: Principais Diferenças, Recursos e Quando Escolher Cada Um
- Python vs Ruby: Comparação Abrangente de Recursos, Vantagens e Casos de Uso
- Entendendo Motores CC vs CA: Diferenças Principais e Guia de Compra
- Brasagem vs Solda Branda: Principais Diferenças Explicadas
- Motores 2 Tempos vs 4 Tempos: Diferenças Principais Explicadas