Strings
Na linguagem C, uma string é um array de caracteres terminado pelo caractere null (‘\0’).

As strings em C são armazenadas como arrays de caracteres, onde cada caractere é armazenado em um elemento do array, e o caractere null marca o final da string.
Declaração de strings
Declaramos uma string usando um array de caracteres:
char str[50]; //declara uma string com capacidade para 50 caracteres
NOTA: o tamanho do array de caracteres da string deve levar em linha de conta com o caractere null. Se, por exemplo quisermos armazenar a string “ola” num array de caracteres este deve ter uma capacidade de pelo menos 4 caracteres.
Inicialização de strings
Podemos inicializar uma string diretamente:
char str[] = "Bem vindos ao C";
Nesse caso, o compilador irá calcular automaticamente o tamanho da string. O caractere null será colocado automaticamente no final da string.
Também podemos inicializar uma string indiretamente, caratere a caratere:
char str[50];
str[0] = 'O';
str[1] = 'l';
str[2] = 'á';
str[3] = '\0'; //caractere null a terminar a string
Podemos igualmente inicializar a string usando a função strcpy() da biblioteca string.h:
#include <string.h>
int main()
{
char str[50];
strcpy(str, "Olá, mundo!");
}
Passagem de strings para funções
Em C, as strings são tratadas como arrays de caracteres. Portanto, podemos passar strings para funções como um array de caracteres:
// Função que imprime uma string
void imprimirString(char str[])
{
printf("A string passada é: %s\n", str);
}
int main()
{
char str[] = "Olá, Mundo!";
imprimirString(str);
return 0;
}
De notar que ao passarmos a string para a função não necessitamos de passar o seu tamanho dado que as strings em C terminam com o caractere null (\0).
Manipulação de strings
A biblioteca string.h oferece várias funções para manipular strings em C. Algumas das funções mais comuns incluem:
strlen
A função strlen retorna o tamanho de uma string.
Assinatura:
size_t strlen( const char* fonte )
Parâmetro:
fonte: string a determinar o tamanho.
Retorno :
um size_t (longo inteiro sem sinal) com o tamanho da string.
Exemplo:
char *str = "Bom dia";
int tamanho = strlen(str); //strlen retorna 7
strcpy
Copia a string fonte para a string de destino, incluindo o caractere terminal de string
Assinatura:
char* strcpy( char* destino, const char* fonte )
Parâmetros:
destino: string que recebe a cópia da string fonte.
fonte: string que vai ser copiada.
Exemplo:
char *str1 = "Bom dia";
char str2[10];
//copia str1 para str2:
strcpy(str2, str1);
strcat
Concatena duas strings. A função strcat anexa a string fonte ao final da string destino, e o resultado é a própria string destino com a concatenação de fonte. A função strcat não aloca nova memória para o resultado e assume que a string destino tem espaço suficiente para conter os caracteres de ambas as strings.
Assinatura:
char* strcat( char* destino, const char* fonte )
Parâmetros:
destino e fonte; strings a serem concatenadas.
Retorno:
String com ambas as strings concatenadas.
Exemplo:
char str1[50] = "Bom dia ";
puts(str1);
char *str2 = "e boa semana";
strcat(str1, str2);
puts(str1); //output: "Bom dia e boa semana"
strcmp
Compara duas strings.
Assinatura:
int strcmp( const char* str1, const char* str2 )
Parâmetros:
str1: A primeira string a ser comparada.
str2: A segunda string a ser comparada.
Retorno:
A função strcmp compara as duas strings, str1 e str2. Ela retorna um valor inteiro que indica a relação entre as strings da seguinte maneira:
Se str1 for igual a str2, a função retorna 0.
Se str1 for lexicograficamente menor (em ordem alfabética) do que str2, a função retorna um valor negativo.
Se str1 for lexicograficamente maior do que str2, a função retorna um valor positivo.
Exemplo:
const char str1[] = "maçã";
const char str2[] = "banana";
int resultado = strcmp(str1, str2);
if (resultado == 0) {
printf("As strings são iguais.\n");
} else if (resultado < 0) {
printf("str1 é menor do que str2.\n");
} else {
printf("str1 é maior do que str2.\n");
}
strchr
A função strchr procura a primeira ocorrência de um caractere numa string.
Assinatura:
char* strchr( const char* str, int caractere)
Parâmetros:
str: A string na qual você deseja procurar o caractere.
caractere: O caractere que você deseja encontrar na string.
Retorno:
Retorna um ponteiro para a primeira ocorrência desse caractere na string. Se o caractere não for encontrado, a função retorna um ponteiro nulo (NULL).
Exemplo:
const char str[] = "Esta é uma string de exemplo.";
int caractere = 'é'; // O caractere a ser encontrado
char *resultado = strchr(str, caractere);
if (resultado != NULL) {
printf("O caractere '%c' foi encontrado na posição: %ld\n", caractere, resultado - str);
} else {
printf("O caractere '%c' não foi encontrado na string.\n", caractere);
}
strstr
A função strstr procura a primeira ocorrência de uma substring numa string.
Assinatura:
char* strstr( const char* str, const char* substring)
Parâmetros:
str: A string na qual você deseja procurar a subcadeia.
substring: A substring que você deseja encontrar na string.
Retorno:
Retorna um ponteiro para o início da substring na string. Se a substring não for encontrada, a função retorna um ponteiro nulo (NULL).
Exemplo:
const char str[] = "Esta é uma string de exemplo.";
const char subcadeia[] = "exemplo"; // A subcadeia a ser encontrada
char *resultado = strstr(str, subcadeia);
if (resultado != NULL) {
printf("A subcadeia '%s' foi encontrada na posição: %ld\n", subcadeia, resultado - str);
} else {
printf("A subcadeia '%s' não foi encontrada na string.\n", subcadeia);
}