O Terminador Nulo
Parte da seção Logic & Flow do Journey de C da Coddy — lição 13 de 63.
Você aprendeu que strings em C são arrays de caracteres, mas há um detalhe crucial que as faz funcionar corretamente: toda string em C deve terminar com um caractere especial chamado terminador nulo, escrito como \0.
O terminador nulo é um caractere com o valor ASCII zero que marca o fim de uma string. Sem ele, funções como printf não saberiam onde sua string termina e continuariam lendo a memória até encontrarem aleatoriamente um byte zero, frequentemente produzindo uma saída de lixo.
char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// O \0 diz ao C: "The string ends here"Quando você inicializa uma string com um literal como "Hello", o C adiciona automaticamente o terminador nulo para você. Mas quando você constrói manualmente uma string caractere por caractere, você deve se lembrar de adicionar \0 ao final.
Este terminador nulo é o motivo pelo qual uma palavra de 5 caracteres como "Hello" precisa de um array de caracteres de 6 elementos - um espaço extra para o \0. Compreender este conceito é essencial porque é a base de como todas as funções de string em C determinam onde as strings começam e terminam.
Desafio
FácilEscreva um programa em C que demonstre a criação e o trabalho com strings usando a inicialização manual caractere por caractere com a terminação nula adequada. Seu programa deve:
- Declarar um array de caracteres chamado
namecom exatamente 5 elementos - Inicializar manualmente o array
namecaractere por caractere para soletrar "John" com a terminação nula adequada:- Primeiro elemento: 'J'
- Segundo elemento: 'o'
- Terceiro elemento: 'h'
- Quarto elemento: 'n'
- Quinto elemento:
'\0'(terminador nulo)
- Declarar um segundo array de caracteres chamado
citycom exatamente 7 elementos - Inicializar manualmente o array
citycaractere por caractere para soletrar "Boston" com a terminação nula adequada:- Use atribuições de caracteres individuais para 'B', 'o', 's', 't', 'o', 'n', e
'\0'
- Use atribuições de caracteres individuais para 'B', 'o', 's', 't', 'o', 'n', e
- Imprimir ambas as strings usando
printfcom o especificador de formato%s - Demonstrar o que acontece sem a terminação nula criando um terceiro array de caracteres chamado
testcom 4 elementos - Inicializar
testapenas com os caracteres 'A', 'B', 'C', 'D' (sem terminador nulo) - Imprimir o array
testusando%spara mostrar uma saída imprevisível
Sua saída deve exibir os resultados no seguinte formato:
Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]Este desafio testa sua compreensão da construção manual de strings, a importância crítica do terminador nulo '\0' em strings C, e como o printf com %s depende de encontrar o terminador nulo para saber onde a string termina.
Folha de consulta
Strings em C são arrays de caracteres que devem terminar com um terminador nulo \0 para marcar o fim da string.
O terminador nulo tem o valor ASCII zero e informa a funções como printf onde a string termina:
char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// O \0 diz ao C: "A string termina aqui"Ao usar literais de string como "Hello", o C adiciona automaticamente o terminador nulo. Ao construir strings caractere por caractere, você deve adicionar manualmente o \0.
Uma string precisa de um elemento extra no array para o terminador nulo - "Hello" (5 caracteres) requer um array de 6 elementos.
Experimente você mesmo
#include <stdio.h>
int main() {
// TODO: Escreva seu código aqui
// Declare e inicialize os arrays de caracteres conforme especificado
// Imprima os resultados
return 0;
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Logic & Flow
1Fundamentos de Ponteiros
O que é um Ponteiro?Declarando PonteirosO Operador de Endereço (&)O Operador de Desreferência (*)Ponteiros NULLRecapitulação: Fundamentos de Ponteiros4Projeto: Utilitário de Texto Simples
Visão Geral do ProjetoContando Caracteres2Ponteiros e Arrays
Nomes de Arrays como PonteirosElementos de Array - PonteirosAritmética de PonteirosComparando PonteirosRecapitulação: Percorrendo Arrays com Ponteiros5Ponteiros e Funções
Passagem por ValorPassando Ponteiros para FunçõesModificando Variáveis via PonteirosUm Exemplo Clássico: SwapPassando Arrays para FunçõesRecapitulação: Ponteiros como Argumentos3Arrays de Caracteres e Strings
Strings como Arrays de charO Terminador NuloEntrada de Strings com scanfUsando strlen()Usando strcpy()Usando strcat()Usando strcmp()Recapitulação: Funções Básicas de Strings6Gerenciamento de Memória
Memória Stack vs. HeapAlocação Dinâmica - malloc()Usando sizeof() para AlocaçãoVerificando Falhas de AlocaçãoLiberando Memória com free()Alocando com calloc()Recapitulação: Array Dinâmico9Projeto: Cadastro Simples de Contatos
Projeto: Definir a Struct de ContatoFunção para Criar um Contato