Aula 23: Quiz (Strings)

Teste seu entendimento sobre terminador nulo, strlen vs sizeof, strcmp e atribuição de strings.

Questão 1 — Fim de uma string

char s[] = "Hello";
printf("%lu\n", sizeof(s));

O que isso imprime?

5
6
4
Erro de compilação
Explicação: Literais de string automaticamente recebem um '\0' (terminador nulo) no final.
"Hello" é H, e, l, l, o, \0 — 6 bytes no total.

Questão 2 — strlen vs sizeof

char s[] = "ABC";
printf("strlen=%lu, sizeof=%lu\n", strlen(s), sizeof(s));

O que isso imprime?

strlen=3, sizeof=3
strlen=3, sizeof=4
strlen=4, sizeof=4
strlen=4, sizeof=3
Explicação: strlen retorna o número de caracteres sem contar o '\0' → 3. sizeof retorna o tamanho em bytes incluindo o '\0' → 4.
Essa distinção aparece o tempo todo — não esqueça.

Questão 3 — Valor de retorno do strcmp

char a[] = "apple";
char b[] = "apple";
if (strcmp(a, b) == 0) {
    printf("same\n");
} else {
    printf("different\n");
}

O que isso imprime?

same
different
Erro de compilação
Comportamento indefinido
Explicação: strcmp retorna 0 quando as duas strings são iguais.
Usar == diretamente compararia endereços em vez de conteúdos, então em C você deve sempre usar strcmp para comparar strings.

Questão 4 — Atribuindo uma string

char s[10];
s = "Hello";
printf("%s\n", s);

O que acontece?

Hello
Erro de compilação
String vazia
Comportamento indefinido
Explicação: Você não pode atribuir a um vetor com =. Use strcpy(s, "Hello").
A forma char s[] = "Hello" no momento da declaração é inicialização, que é permitida. Inicialização e atribuição não são a mesma coisa.

Resultado

Responda todas as questões para ver sua pontuação.
Início