Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. Declarar uma string
  2. Acessar/alterar
  3. Iterar uma string
  4. Copiar conteúdo
  5. Descobrir tamanho
  6. String como parâmetro/argumento e retorno

Nesta parte do tutorial vamos aprender as operações básicos envolvendo o tipo de dado string. Declaração, atribuição, iteração e outros usos básicos serão vistos.

Um introdução sobre esses tipos de dados já foram visto em C Tipos de Dados: String sendo a leitura recomendada.

O tipo de dado ponteiro para ser visto em C: Ponteiro sendo a leitura recomendada.

Para a linguagem C, o tipo de dado string é uma cadeia de caracteres justapostos. Abaixo uma abstração da representação de uma string em um local de memória.

0 1 2 3 4 5 6
's' 't' 'r' 'i' 'n' 'g' '\0'

Para a declaração de um string em na linguagem, utilizando um vetor do tipo char ou ponteiro para tipo char.

Sintaxe

1. char nome_var[tamanho] = {vetor_char,\'0'};
2. char nome_var[tamanho] = "string";
3. char *nome_var = "string"; 
Onde
vetor_char: vetor de caracteres separador por vírgula.
string: sequência de caracteres
tamanho: Tamanho da string. Não obrigatório se string for iniciado na declaração.
Descrição

Na declaração 1, temos a declaração de uma string mutável e precisamos informar o terminador de string '\0'.

Na declaração 2 temos a declaração de uma string mutável e terminador de string '\0' e adicionado automaticamente.

Na declaração 3 temos a declaração de uma string imutável/somente-leitura e terminador de string '\0' e adicionado automaticamente.

Exemplo 1
#include &stdio.h>

void main()
{
    char string1[] = {'s','t','r','i','n','g','1','\0'};
    char string2[] = "string2";
    char *string3 = "string3";
    
    printf("%s \n", string1);
    printf("%s \n", string2);
    printf("%s \n", string3);
}
Saída
string1 
string2 
string3

O acesso/alteração aos elementos/caracteres de uma string é feito utilizando o indexador [] que recebe um índice ou posição do elemento como argumento.

Sintaxe
nome_var[índice] = valor;
nome_var[índice];
Exemplo 2
#include <stdio.h>

void main()
{
    char string2[] = "string2";
    string2[0] = 'S';
    char *pnt = string2;
    pnt[6] = '3';
    printf("%s",string2);
}
Saída
String3

Quando temos conhecimento sobre o tamanho da string que desejamos iterar, podemos utilizar o comando for, por exemplo, para iterar sobre os caracteres de uma string.

Exemplo 3
#include <stdio.h>

#include 

void main()
{
    char string2[] = "string2";

    int i;
    for(i = 0; i < 7; i++ )
        printf("%c", string2[i]);
}
Saída
string2

Caso o tamanho da string não seja conhecido, precisamos recorrer ao uso do terminador '\0' para iterar os caracteres de uma string em conjunto com o comando for.

Exemplo 4
#include <stdio.h>

void main()
{
    char string2[] = "string2";
    
    for(i = 0 ; string2[i] != '\0'; pnt++)
        printf("%c", *pnt);
}
Saída
string2

Para copiarmos, de forma básica, o conteúdo de uma string para uma outra, precisamos criar uma string "vazia" de destino. Utilizamos o comando for para iterar a string origem, o indexador [] para acessar os elementos da string origem e realizar a cópia.

Exemplo 5
#include <stdio.h>

int main()
{
    char origem[] = "string2";
    char destino[8];
    
    int i;
    
    for(i = 0; i < 7; i++ )
       destino[i] = origem[i];
    destino[7] = '\0';
    
    printf("%s",destino);
    return 0;
}
Saída
string2

A string de destino no exemplo acima, deve ser declarada com espaço suficiente para adicionar o terminar '\0'. Outras formas de cópia serão vistas em futuras atualizações.

Para descobrirmos o tamanho de uma string, precisaos iterar sobre essa string até que o terminador seja encontrado. Vamos utilizar ponteiro para auxiliar na iteração e também o comando while.

Exemplo 6
#include <stdio.h>

void main()
{
    char string[] = "string2";
    int contador;
    
    while(string[contador] != '\0')
        contador++; 

    printf("%d",contador);
}
Saída
7

Podemos utilizar o operador sizeof para descobrir o número de elementos de uma string. Esse operador irá retornar o tamanho do vetor de char passado como argumento. Assim, temos que decrementar o seu retorno para excluir o terminador '\0' contabilizado.

Exemplo 7
#include <stdio.h>
int main()
{
    char string[] = "string2";
    printf("%lu",sizeof(string) - 1);
}
Saída
7

A bliblioteca string.h possui uma função chamada strlen que retorna o tamanho de uma string. Essa função será vista mais adiante em C String: Operações.

Uso de string como parâmetro de uma função é feita utilizando ponteiro ou como vetor de char como pode ser visto nas sintaxes abaixo:

Sintaxe
tipo_retorno funcao(char string[]); //protótipo
tipo_retorno funcao(char *string);  //protótipo
Exemplo 8
#include <stdio.h>

void funcao1( char v[])
{
    printf("%s\n", v);
    //omitido
}

void funcao2(char *s)
{
    printf("%s\n", s);
    //omitido    
}

int main()
{
    char string[] = "string2";
    funcao1(string);
    funcao2(string);
}
Saída
string2
string2

Para declararmos funções que retornam o tipo de dado string, precisamos declarar o tipo de retorno de uma função como o tipo ponteiro para char, como pode ser visto na sintaxe abaixo:

Sintaxe
char* funcao(); //protótipo
char *funcao(); //protótipo
Exemplo 9
#include <stdio.h>

char *funcao1()
{
    return "string1";
}

char *funcao2()
{
    char *string = "string2";
    return string;
}

char *funcao3()
{
    static char string[] = "string3";
    return string;
}

int main()
{
    printf("%s\n", funcao1());
    printf("%s\n", funcao2());
    printf("%s\n", funcao3());
}
Saída
string2
string2
string3

O modificador static foi utilizado na função funcao3 no exemplo acima, pois a linguagem C não permite retornar ponteiro de variáveis locais.

  1. 08/10/2024 - revisão 3 - Correção: Numeração de exemplos, sintaxe 'Parâmetro/argumento'; Ajustes pontuais
  2. 30/08/2024 - revisão 2 - Correção em links de objetivos
  3. 28/09/2023 - revisão 1 - Correção em referências, erros gramaticais, sintaxe e exemplos
  4. 19/05/2023 - versão inicial