C++: Strings no Estilo C

Última atualização: 2026-08-26

C++ possui dois tipos de strings:

  1. Strings no estilo C (arrays de caracteres)
  2. String C++ (coberto mais tarde)

Esta aula aborda strings no estilo C primeiro — elas são uma herança do C que C++ mantém por compatibilidade. Entendê-las ajuda a compreender os princípios subjacentes das strings.



1. O que é uma String no Estilo C?

(1) 1.1 Essência: Array de Caracteres + Terminador Nulo

Uma string no estilo C é simplesmente um array de caracteres, com uma regra especial:

TEXT 📖 Somente leitura
"Hello" na memória:
+---+---+---+---+---+----+
| H | e | l | l | o | \0 |
+---+---+---+---+---+----+
  0 1 2 3 4 5 ← índices

💡 Ponto-chave: O comprimento de uma string no estilo C é 5 (Hello), mas o tamanho do array deve ser pelo menos 6 (para armazenar \0).



2. Declaração e Inicialização

(1) 2.1 Declarando uma String no Estilo C

Sintaxe:

TEXT 📖 Somente leitura
char nomeString[Tamanho];

Exemplo:

▶ Exemplo 2: Prática Básica de Programação (Dificuldade ⭐)

CPP
#include <iostream>

int main() {
 char name[20]; // Pode armazenar 19 caracteres + 1 \0
 
 name[0] = 'H';
 name[1] = 'e';
 name[2] = 'l';
 name[3] = 'l';
 name[4] = 'o';
 name[5] = '\0'; // Não esqueça o terminador nulo!
 
 std::cout << "Name: " << name << std::endl; // Hello
 
 return 0;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Name: Hello

💡 Dica: Adicionar \0 manualmente é tedioso — você aprenderá métodos mais simples depois.

(2) 2.2 Inicializando uma String no Estilo C

Método 1: Inicializar com uma string literal

CPP
#include <iostream>

int main() {
 char name[] = "Hello"; // ✅ Compilador adiciona \0 automaticamente, tamanho do array é 6
 
 std::cout << "Name: " << name << std::endl;
 
 return 0;
}

💡 Ponto-chave: Ao inicializar com uma string literal, você não precisa especificar o tamanho do array — o compilador calcula automaticamente (incluindo \0).



3. Funções Comuns de Strings

Funções de strings no estilo C estão no arquivo de cabeçalho cstring.

(1) 3.1 strlen: Calcular o Comprimento da String

CPP
#include <iostream>
#include <cstring> // Deve incluir este cabeçalho

int main() {
 char name[] = "Hello";
 
 std::cout << "String: " << name << std::endl;
 std::cout << "Length: " << std::strlen(name) << std::endl; // 5(excluindo \0)
 
 return 0;
}

💡 Dica: std::strlen retorna o número de caracteres efetivos (excluindo \0), enquanto sizeof retorna o tamanho do array (incluindo \0).

CPP
char name[] = "Hello";
std::cout << sizeof(name) << std::endl; // 6(Tamanho do array)
std::cout << std::strlen(name) << std::endl; // 5(contagem de caracteres efetivos)

(2) 3.2 strcpy: Copiar uma String

CPP
#include <iostream>
#include <cstring>

int main() {
 char src[] = "Hello";
 char dest[20];
 
 std::strcpy(dest, src); // Copia src para dest
 
 std::cout << "src:" << src << std::endl;
 std::cout << "dest:" << dest << std::endl;
 
 return 0;
}

⚠️ Aviso: std::strcpy não verifica o tamanho do array de destino — se dest for muito pequeno, causará um estouro de buffer!

Função mais segura (após C++11):

CPP
std::strncpy(dest, src, sizeof(dest) - 1); // Copia no máximo sizeof(dest)-1 caracteres
dest[sizeof(dest) - 1] = '\0'; // Adiciona terminador nulo manualmente

(3) 3.3 strcat: Concatenar Strings

CPP
#include <iostream>
#include <cstring>

int main() {
 char greeting[50] = "Hello, ";
 char name[] = "World";
 
 std::strcat(greeting, name); // Acrescenta name ao final de greeting
 
 std::cout << greeting << std::endl; // Hello, World
 
 return 0;
}

(4) 3.4 strcmp: Comparar Strings

CPP
#include <iostream>
#include <cstring>

int main() {
 char str1[] = "Hello";
 char str2[] = "Hello";
 char str3[] = "World";
 
 std::cout << "strcmp(str1, str2) = " << std::strcmp(str1, str2) << std::endl;
 std::cout << "strcmp(str1, str3) = " << std::strcmp(str1, str3) << std::endl;
 
 return 0;
}

Valores de retorno:

💡 Dica: Não use == para comparar strings no estilo C! == compara endereços, não conteúdo.

TEXT 📖 Somente leitura
char str1[] = "Hello";
char str2[] = "Hello";

if (str1 == str2) { // ❌ Erro: Comparando endereços, não conteúdo
 // ...
}

if (std::strcmp(str1, str2) == 0) { // ✅ Correto:Use strcmp para comparar conteúdo
 // ...
}


4. Manipulando Strings no Estilo C com cin e cout

(1) 4.1 Lendo Strings

CPP
#include <iostream>

int main() {
 char name[20];
 
 std::cout << "Por favor, digite seu nome: ";
 std::cin >> name; // ✅ Pode ler strings (mas sem espaços)
 
 std::cout << "Olá," << name << "!" << std::endl;
 
 return 0;
}

💡 Problema: cin >> para no espaço em branco! Se você digitar "John Smith", ele só lê "John".

Solução: Use std::cin.getline

CPP
#include <iostream>

int main() {
 char name[50];
 
 std::cout << "Por favor, digite seu nome completo: ";
 std::cin.getline(name, 50); // ✅ Lê a linha inteira (incluindo espaços)
 
 std::cout << "Olá," << name << "!" << std::endl;
 
 return 0;
}


5. Prática: Processamento Simples de Strings

▶ Exemplo 1: Contando Vogais em uma String (Dificuldade ⭐⭐)

CPP
#include <iostream>
#include <cstring>

int main() {
 char str[100];
 std::cout << "Por favor, digite uma string: ";
 std::cin.getline(str, 100);
 
 int vowels = 0;
 for (int i = 0; i < std::strlen(str); i++) {
 char c = str[i];
 if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' ||
 c == 'A' || c == 'E' || c == 'I' || c == 'O' || c == 'U') {
 vowels++;
 }
 }
 
 std::cout << "Contagem de vogais: " << vowels << std::endl;
 
 return 0;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Por favor, digite uma string: 
Contagem de vogais: 

Resultado da execução:

TEXT 📖 Somente leitura
Por favor, digite uma string: Hello World
Contagem de vogais: 3


6. Erros Comuns

(1) 6.1 Esquecer de Deixar Espaço para \0

Exemplo de erro:

TEXT 📖 Somente leitura
#include <iostream>

int main() {
 char name[5] = "Hello"; // ❌ Erro: "Hello" precisa de 6 caracteres (incluindo \0), mas tamanho do array é apenas 5
 std::cout << name << std::endl;
 return 0;
}

Correção:

CPP
char name[6] = "Hello"; // ✅ Correto:Tamanho do array deve ser pelo menos 6

(2) 6.2 Usar = para Atribuir uma String

Exemplo de erro:

TEXT 📖 Somente leitura
#include <iostream>

int main() {
 char str1[20];
 char str2[] = "Hello";
 
 str1 = str2; // ❌ Erro: Não é possível atribuir a um array
 str1 = "World"; // ❌ Erro: Não é possível atribuir a um array
 
 return 0;
}

Correção: Use strcpy

CPP
#include <iostream>
#include <cstring>

int main() {
 char str1[20];
 char str2[] = "Hello";
 
 std::strcpy(str1, str2); // ✅ Correto:Use strcpy para copiar
 std::cout << str1 << std::endl;
 
 return 0;
}

❓ Perguntas Frequentes

P: Quando devo usar strings no estilo C, e quando devo usar strings C++? R: Prefira strings C++ (coberto mais tarde), a menos que: > 1. Você esteja mantendo código legado (código C) > 2. Você esteja fazendo otimização de baixo nível (strings no estilo C são mais eficientes)

Strings C++ são mais seguras e fáceis de usar; recomendadas para iniciantes.

P: Por que char name[] = "Hello" funciona, mas int arr[] = {1, 2, 3} não funciona? R: Apenas strings literais podem inicializar diretamente arrays de caracteres.

CPP
char name[] = "Hello"; // OK
int arr[] = {1, 2, 3}; // OK(esta é uma lista de inicializadores, não uma string literal)

P: Como converto uma string no estilo C para uma string C++?

R: Você pode atribuir diretamente (o construtor da string C++ faz a conversão automaticamente).

CPP
#include `<iostream>`
#include `<string>`

int main() {
    char cstr[] = "Hello";
    std::string cppStr = cstr;  // Conversão automática
    
    std::cout << cppStr << std::endl;
    return 0;
}

▶ Exemplo 3: Comprimento e Cópia de String (Dificuldade ⭐)

CPP
#include <iostream>
#include <cstring>

int main() {
    char src[] = "Hello";
    char dest[20];

    std::cout << "Comprimento de src: " << strlen(src) << std::endl;

    strcpy(dest, src);
    std::cout << "Após cópia: " << dest << std::endl;

    return 0;
}
▶ Experimente

Saída:

TEXT 📖 Somente leitura
Comprimento de src: 5
Após cópia: Hello
💡 Dica: Strings no estilo C usam strlen() para obter o comprimento e strcpy() para copiar. Certifique-se de que o array de destino seja grande o suficiente!


📖 Resumo


📝 Exercícios

  1. Básico (Dificuldade ⭐): Declare uma string no estilo C char str[] = "Hello, World!", depois exiba seu comprimento e cada caractere.

  2. Intermediário (Dificuldade ⭐⭐): Escreva um programa que permita ao usuário digitar duas strings e compare se elas são iguais (usando strcmp).

  3. Desafio (Dificuldade ⭐⭐⭐): Escreva um programa que implemente "inversão de string":

  4. Deixe o usuário digitar uma string

  5. Inverta-a (ex: "Hello" se torna "olleH")

  6. Implemente usando strings no estilo C (não use string C++)


7. 🚀 Próximo Passo

Agora que você aprendeu strings no estilo C, vamos avançar para String C++ (Aula 19) — uma classe de string mais segura e fácil de usar!

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%