Material organizado para estudo progressivo, com leitura confortável, recursos complementares e navegação para a próxima etapa da disciplina.
Resumo
Em C, uma string não é um tipo nativo — ela é simplesmente um array de char que obrigatoriamente termina com o caractere nulo '\0' (valor ASCII 0), que ocupa um byte extra e marca o fim do texto para todas as funções da linguagem. A declaração mais comum é char s[] = "texto", onde o compilador insere o '\0' automaticamente, mas o programador deve sempre reservar espaço suficiente: uma string de 3 letras exige 4 bytes. Para ler texto do usuário, scanf("%s", s) lê apenas uma palavra (para no espaço), enquanto fgets(s, N, stdin) lê frases completas com segurança, sendo a opção recomendada para evitar estouros de buffer. Como a string é um array, percorrê-la é simplesmente iterar com for usando s[i] != '\0' como condição de parada, o que permite implementar manualmente operações como contagem de vogais, conversão de maiúsculas e cálculo do comprimento. Para as operações mais comuns — copiar, concatenar, comparar e medir —, a biblioteca oferece funções prontas como strcpy, strcat, strcmp e strlen. O erro mais perigoso e frequente é comparar strings com ==, que compara endereços de memória e não o conteúdo; a forma correta é sempre strcmp(a, b) == 0. Outros cuidados essenciais: nunca atribuir string com = a um char[] (use strcpy), nunca omitir o '\0', e preferir as versões seguras strncpy e strncat em código de produção.
Algoritmos e Programação08/06/2026Aula interativa importada
Leitura pensada para estudo, consulta e revisão. Use a navegação lateral para alternar entre etapas da aula.
Estudo
Conteúdo interativo — HTML importado
Aula 06 - Strings em C: Texto como Array
Abra o material em tela cheia para estudar com conforto, sem sair da disciplina.
Aula 06 - Strings em C: Texto como Array
100%
Carregando conteúdo interativo...
Aula — Strings em C ◀ ▶ 1 / 0 ⛶ Tela cheia " " 'O' 'L' 'A' '\0' [0] [1] [2] [3] char nome[4] = "OLA"; ▶ Algoritmo e Programação · Linguagem C Engenharia da Computação · 2025 · Prof. Evandro Júnior Strings em C: Texto como Array Entenda por que "Olá" é apenas um char[] com um '\0' no fim — e domine leitura, escrita e as funções essenciais de string.h. char[ ] '\0' nulo string.h ~2 horas Pré-req: arrays Interativo 🎮 01 01· Conceito O que é uma String? 📝 Definição Em C, uma string é um array de char que termina com o caractere especial '\0' (nulo, valor ASCII 0). Não existe um tipo string nativo — é sempre um array! conceito.cC📋 // As duas formas são equivalentes: // Forma 1 — literal entre aspas duplas char nome[] = "Olá"; // Forma 2 — array de chars explícito char nome[] = {'O', 'l', 'á', '\0'}; // '\0' é inserido automaticamente // na Forma 1 — mas ocupa 1 posição! 🔑 O terminador nulo é obrigatório Toda função de string em C espera encontrar '\0' para saber onde o texto termina. Sem ele, as funções lêem além da string — comportamento indefinido. Como "Olá" fica na memória 'O'[0] 'l'[1] 'á'[2] '\0'[3] "Olá" tem 3 letras → ocupa 4 bytes (3 chars + '\0') Regra: ao declarar char s[N], a string pode ter no máximo N−1 caracteres (1 reservado para '\0') '\0' ≠ '0' — o nulo tem valor ASCII 0; o caractere '0' tem valor ASCII 48 02 02· Declaração Declarando e Inicializando 📐 Sintaxe básica char nome[tamanho]; declaracao.cC📋 // ✅ Com literal — '\0' automático char cidade[] = "Montes Claros"; // ✅ Tamanho fixo (precisa de espaço para '\0') char nome[50]; // até 49 chars úteis char senha[21] = "abc123"; // ✅ Ponteiro para literal (somente leitura!) const char *msg = "não modificável"; // ❌ Sem espaço para '\0' — PERIGOSO! char mal[3] = {'A', 'B', 'C'}; // falta '\0'! ⚠️ Ponteiro ≠ array char *s = "texto" aponta para memória somente leitura. Tentar modificar s[0] = 'X' causa comportamento indefinido. Use char s[] para poder modificar. Comparação: formas de declarar Formas de declarar strings Forma Modificável? '\0' auto? char s[] = "abc" ✓ sim ✓ sim char s[10] = "abc" ✓ sim ✓ sim char *s = "abc" ✗ não ✓ sim char s[3] = {'a','b','c'} ✓ sim ✗ não! Visualizador — clique para ver o '\0' ▶ "Olá" ▶ "C" ▶ "Hello!" ▶ "" Clique num botão para visualizar a string na memória 03 03· Entrada e Saída Lendo e Imprimindo Strings 🖨️ Saída com printf Use o especificador %s para imprimir uma string. O printf percorre o array até encontrar '\0'. saida.cC📋 #include <stdio.h> int main() { char nome[] = "Evandro"; printf("%s\n", nome); // Evandro printf("Olá, %s!\n", nome); // Olá, Evandro! puts(nome); // Evandro + '\n' // char a char (como um array normal) for (int i = 0; nome[i] != '\0'; i++) printf("%c", nome[i]); return 0; } ⌨️ Entrada com scanf e fgets scanf("%s", s) lê até o primeiro espaço. Para ler frases completas (com espaços), use fgets. entrada.cC📋 char nome[50]; char frase[100]; // scanf — para uma palavra só scanf("%s", nome); // sem & ! // fgets — para frases com espaços ✅ fgets(frase, 100, stdin); // fgets inclui '\n' no final — remova se necessário: // frase[strcspn(frase, "\n")] = '\0'; scanf vs fgets scanf — só uma palavra char s[50]; scanf("%s", s); // Digitou: "Montes Claros" // s = "Montes" ← parou no espaço! // "Claros" fica no buffer fgets — frase completa char s[50]; fgets(s, 50, stdin); // Digitou: "Montes Claros" // s = "Montes Claros\n" ✅ // lê até 49 chars + '\0' 🎮 Simulador — analisando char a char ▶ Percorrer ↺ Reset i = — s[i] = — ASCII = — $ digite algo e clique Percorrer... 04 04· Strings + Laços Percorrendo com for 🔄 Dois padrões de laço Com strings, o for pode usar índice numérico ou testar diretamente o caractere atual — ambos param no '\0'. Padrão 1 — com índice (clássico) percorrer_idx.cC📋 char s[] = "Olá"; for (int i = 0; s[i] != '\0'; i++) { printf("%c\n", s[i]); } // ou: i < strlen(s) — mas s[i]!='\0' é mais eficiente Padrão 2 — com ponteiro (avançado) percorrer_ptr.cC📋 char s[] = "Olá"; char *p = s; // p aponta para s[0] while (*p != '\0') { // enquanto não for nulo printf("%c\n", *p); p++; // avança para o próximo char } 💡 Exemplo prático — contar vogais contar_vogais.cC📋 int vogais = 0; for (int i = 0; s[i]; i++) { char c = s[i]; if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'|| c=='A'||c=='E'||c=='I'||c=='O'||c=='U') vogais++; } printf("Vogais: %d\n", vogais); 🎮 Simulador — operações char a char A→a Maiúsc. a→A Minúsc. 🔤 Vogais 📏 Tamanho ↺ $ string de exemplo: "Programacao" 🔡 Maiúscula ↔ Minúscula Diferença de ASCII entre 'A' (65) e 'a' (97) é 32. Para converter: c + 32 (maiúsc→minúsc) ou c - 32 (minúsc→maiúsc). Ou use as funções toupper() / tolower() de ctype.h. 05 05· string.h Funções de string.h 📦 #include <string.h> A biblioteca padrão oferece funções prontas para as operações mais comuns com strings. Nunca reinvente a roda quando string.h já tem! Principais funções de string.h Função O que faz Retorno strlen(s) Comprimento da string size_t strcpy(dst, src) Copia src para dst dst strcat(dst, src) Concatena src ao final de dst dst strcmp(a, b) Compara duas strings int strchr(s, c) Busca char c em s char* strstr(s, sub) Busca substring em s char* strncpy(d, s, n) Copia até n chars (seguro) dst strncat(d, s, n) Concatena até n chars (seguro) dst Exemplos de uso strfunc.cC📋 #include <stdio.h> #include <string.h> int main() { char a[50] = "Olá"; char b[] = " Mundo"; printf("%zu\n", strlen(a)); // 3 strcat(a, b); printf("%s\n", a); // Olá Mundo char c[50]; strcpy(c, a); printf("%s\n", c); // Olá Mundo // strcmp: 0 = iguais, <0 ou >0 = diferentes if (strcmp(a, c) == 0) printf("Iguais!\n"); return 0; } 🎮 Simulador — string.h strlen strcat strcmp strcpy ↺ $ escolha uma função para simular... 06 06· Comparação Comparando Strings com strcmp 🚫 NUNCA use == para comparar strings! a == b compara os endereços de memória, não o conteúdo. Para comparar o texto, use strcmp(). ❌ Errado — compara endereços char a[] = "abc"; char b[] = "abc"; if (a == b) // sempre FALSE! printf("iguais"); // a e b estão em endereços diferentes ✅ Correto — strcmp char a[] = "abc"; char b[] = "abc"; if (strcmp(a, b) == 0) printf("iguais"); // ✓ correto! // strcmp retorna 0 se iguais O que strcmp retorna strcmp(a, b) Resultado Significado Exemplo == 0 Strings iguais "abc" == "abc" < 0 a vem antes de b (lexicogr.) "abc" < "abd" > 0 a vem depois de b (lexicogr.) "b" > "a" 🎮 Comparador interativo a: b: ▶ Comparar com strcmp $ preencha as strings e clique Comparar... 🔤 Comparação é case-sensitive! "ABC" != "abc" para strcmp. Para comparar ignorando maiúsculas, converta as duas strings para o mesmo caso antes de comparar. 07 07· Cuidados Erros Comuns ✗ ERRO 1 — Buffer overflow char s[5]; scanf("%s", s); // Usuário digita "ProgramacaoEmC" (14 chars) // ❌ estoura o buffer de 5 posições! // Pode corromper memória ou travar o programa // ✅ Limite com scanf: scanf("%4s", s); // lê no máximo 4 chars ✗ ERRO 2 — Atribuição com = char a[20] = "Olá"; char b[20]; b = a; // ❌ ERRO de compilação! Arrays não se copiam com = // ✅ correto: strcpy(b, a); ✗ ERRO 3 — Comparar com == if (senha == "1234") // ❌ sempre false! if (strcmp(senha, "1234") == 0) // ✅ ✗ ERRO 4 — Sem espaço para '\0' char s[3] = "abc"; // ❌ "abc" precisa de 4 bytes! // Compilador pode aceitar, mas falta o '\0' // ✅ correto: char s[4] = "abc"; // ou char s[] = "abc" Boas práticas ✅ Use fgets no lugar de scanf para frases fgets(s, sizeof(s), stdin); ✅ Use strncpy e strncat (versões seguras) strncpy(dst, src, sizeof(dst) - 1); dst[sizeof(dst) - 1] = '\0'; ✅ Sempre dimensione com espaço para '\0' char nome[51]; // 50 úteis + 1 para '\0' 💡 sizeof vs strlen char s[20] = "abc"; sizeof(s) // → 20 (tamanho do array) strlen(s) // → 3 (comprimento do texto) 08 08· Prática Exercícios Práticos 1 Declare uma string com seu nome e imprima o comprimento e cada caractere com seu índice. fácil ▼ solucao1.cC #include <stdio.h> #include <string.h> int main() { char nome[] = "Evandro"; printf("Comprimento: %zu\n", strlen(nome)); for (int i=0; nome[i]!='\0'; i++) printf("[%d] = '%c'\n", i, nome[i]); return 0; } 2 Leia uma string com fgets e imprima quantas letras maiúsculas ela contém. fácil ▼ solucao2.cC #include <stdio.h> int main() { char s[100]; fgets(s, 100, stdin); int maiusc = 0; for (int i=0; s[i]; i++) if (s[i] >= 'A' && s[i]