<string.h>
Esta é uma biblioteca padrão da linguagem C. Nela estão contidos protótipos utilizados para a manipulação de strings, também conhecidos como array de chars. Estas funções são capazes desde a contagem, cópia e concatenação, comparação e diversas outras modificações como podemos ver nos exemplos a seguir.
Macros
- NULL: Um ponteiro constante que aponta para 0 (zero), pode ser escrito com uma chamada de
cast definida por:
(void *)(0)
Variáveis
- size_t: Um longo inteiro sem sinal, responsável por guardar a quantidade de bytes de qualquer
objeto retornado pelo operador
sizeof.
Funções
void *memchr(const void *str, int c, size_t n)
Procura pela primeira ocorrência do caractere c (um unsigned char) nos primeiros n bytes do bloco de
memória apontado por str.
Exemplo
// EXEMPLO MEMCHR()
#include <stdio.h>
#include <string.h>
int main () {
const char str[] = "http://www.pet.inf.ufscar.br";
const char ch = '.';
char *ret;
ret = memchr(str, ch, strlen(str));
printf("String depois de |%c| eh - |%s|\n", ch, ret);
return(0);
}
Saída esperada
String depois de |.| eh - |.inf.ufscar.br|
int memcmp(const void *str1, const void *str2, size_t n)
Compara os primeiros n bytes das áreas de memória apontadas por str1 e str2.
Exemplo
// EXEMPLO MEMCMP()
#include <stdio.h>
#include <string.h>
int main () {
char str1[15];
char str2[15];
int ret;
memcpy(str1, "abcdef", 6);
memcpy(str2, "ABCDEF", 6);
ret = memcmp(str1, str2, 5);
if(ret > 0) {
printf("str2 eh menor que str1\n");
} else if(ret < 0) {
printf("str1 eh menor que str2\n");
} else {
printf("str1 eh igual a str2\n");
}
return(0);
}
Saída esperada
str2 eh menor que str1
void *memcpy(void *dest, const void *src, size_t n)
Copia n bytes da área de memória src para a
área de memória dest.
Exemplo
// EXEMPLO MEMCPY()
#include <stdio.h>
#include <string.h>
int main () {
const char src[50] = "http://www.pet.inf.ufscar.br";
char dest[50];
strcpy(dest,"Helo!! ");
printf("Antes do memcpy dest = %s\n", dest);
// Copia a string de src para dest, incluindo o caractere nulo
memcpy(dest, src, strlen(src) + 1);
printf("Depois do memcpy dest = %s\n", dest);
return(0);
}
Saída esperada
Antes do memcpy dest = Helo!!
Depois do memcpy dest = http://www.pet.inf.ufscar.br
void *memmove(void *str1, const void *str2, size_t n)
Copia n bytes da área de memória str2 para
str1. Diferente da memcpy, esta função lida
com segurança caso os blocos de memória se sobreponham.
Exemplo
// EXEMPLO MEMMOVE()
#include <stdio.h>
#include <string.h>
int main () {
char dest[] = "oldstring";
const char src[] = "newstring";
printf("Antes de memmove dest = %s, src = %s\n", dest, src);
// Move os 9 bytes de src para dest
memmove(dest, src, 9);
printf("Depois de memmove dest = %s, src = %s\n", dest, src);
return(0);
}
Saída esperada
Antes de memmove dest = oldstring, src = newstring
Depois de memmove dest = newstring, src = newstring
void *memset(void *str, int c, size_t n)
Preenche os primeiros n bytes da área de memória apontada por str com o valor constante c.
Exemplo
// EXEMPLO MEMSET()
#include <stdio.h>
#include <string.h>
int main () {
char str[50];
strcpy(str, "Essa e a funcao memset");
puts(str);
// Preenche os primeiros 7 caracteres com '$'
memset(str, '$', 7);
puts(str);
return(0);
}
Saída esperada
Essa e a funcao memset
$$$$$$$ e a funcao memset
char *strcat(char *destino, const char *fonte)
Concatena a string fonte ao final da string de destino.
Exemplo
// EXEMPLO STRCAT()
#include <stdio.h>
#include <string.h>
int main() {
char resultado[50] = "Programa ";
printf("%s\n", resultado);
strcat(resultado, "de Ensino ");
printf("%s\n", resultado);
strcat(resultado, "e Tutoria");
printf("%s\n", resultado);
char curso[10] = " - BCC";
strcat(resultado, curso);
printf("%s\n", resultado);
return 0;
}
Saída esperada
Programa
Programa de Ensino
Programa de Ensino e Tutoria
Programa de Ensino e Tutoria - BCC
char *strncat(char *dest, const char *src, size_t n)
Concatena até n caracteres da string src ao
final da string dest.
Exemplo
// EXEMPLO STRNCAT()
#include <stdio.h>
#include <string.h>
int main () {
char src[50], dest[50];
strcpy(src, "This is source");
strcpy(dest, "This is destination");
// Anexa os primeiros 15 caracteres de src em dest
strncat(dest, src, 15);
printf("Final destination string : |%s|\n", dest);
return(0);
}
Saída esperada
Final destination string : |This is destinationThis is source|
char *strchr(const char *str, int c)
Procura pela primeira ocorrência do caractere c (um unsigned char) na string apontada por str.
Exemplo
// EXEMPLO STRCHR()
#include <stdio.h>
#include <string.h>
int main () {
const char str[] = "http://www.tutorialspoint.com";
const char ch = '.';
char *ret;
ret = strchr(str, ch);
printf("String after |%c| is - |%s|\n", ch, ret);
return(0);
}
Saída esperada
String after |.| is - |.tutorialspoint.com|
int strcmp(const char *str1, const char *str2)
Compara a string apontada por str1 com a string apontada por str2 caractere por caractere.
Exemplo
// EXEMPLO STRCMP()
#include <stdio.h>
#include <string.h>
int main () {
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abcdef");
strcpy(str2, "ABCDEF");
ret = strcmp(str1, str2);
if(ret < 0) {
printf("str1 is less than str2\n");
} else if(ret > 0) {
printf("str2 is less than str1\n");
} else {
printf("str1 is equal to str2\n");
}
return(0);
}
Saída esperada
str2 is less than str1
int strncmp(const char *str1, const char *str2, size_t n)
Compara os primeiros n caracteres das strings str1 e str2.
Exemplo
// EXEMPLO STRNCMP()
#include <stdio.h>
#include <string.h>
int main () {
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abcdef");
strcpy(str2, "ABCDEF");
// Compara apenas os primeiros 4 caracteres
ret = strncmp(str1, str2, 4);
if(ret < 0) {
printf("str1 is less than str2\n");
} else if(ret > 0) {
printf("str2 is less than str1\n");
} else {
printf("str1 is equal to str2\n");
}
return(0);
}
Saída esperada
str2 is less than str1
int strcoll(const char *str1, const char *str2)
Compara a string str1 com a string str2.
Diferente da strcmp, o resultado desta função depende da configuração LC_COLLATE da localidade (idioma/região) atual do sistema.
Exemplo
// EXEMPLO STRCOLL()
#include <stdio.h>
#include <string.h>
int main () {
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abcde");
strcpy(str2, "ABCDE");
ret = strcoll(str1, str2);
if(ret > 0) {
printf("str1 eh maior que str2\n");
} else if(ret < 0) {
printf("str2 eh maior que str1\n");
} else {
printf("str1 eh igual a str2\n");
}
return(0);
}
Saída esperada
str1 eh maior que str2
char *strcpy(char *dest, const char *src)
Copia a string apontada por src para o destino dest, incluindo o caractere nulo terminador (\0).
Exemplo
// EXEMPLO STRCPY()
#include <stdio.h>
#include <string.h>
int main () {
char src[40];
char dest[100];
// Limpa o destino e prepara a origem
memset(dest, '\0', sizeof(dest));
strcpy(src, "Esta eh a origem");
// Copia o conteúdo de src para dest
strcpy(dest, src);
printf("String de destino: %s\n", dest);
return(0);
}
Saída esperada
String de destino: Esta eh a origem
char *strncpy(char *dest, const char *src, size_t n)
Copia até n caracteres da string apontada por src para dest. Caso a string de origem seja menor
que n, o restante do destino é preenchido com caracteres nulos (\0).
Exemplo
// EXEMPLO STRNCPY()
#include <stdio.h>
#include <string.h>
int main () {
char src[40];
char dest[12];
// Inicializa o destino com nulos
memset(dest, '\0', sizeof(dest));
strcpy(src, "Esta eh a origem");
// Copia apenas os primeiros 10 caracteres
strncpy(dest, src, 10);
printf("String final de destino: %s\n", dest);
return(0);
}
Saída esperada
String final de destino: Esta eh a
size_t strcspn(const char *str1, const char *str2)
Calcula o comprimento do segmento inicial de str1 que consiste inteiramente de
caracteres que não estão presentes em str2.
Exemplo
// EXEMPLO STRCSPN()
#include <stdio.h>
#include <string.h>
int main () {
int len;
const char str1[] = "ABCDEF4960910";
const char str2[] = "013";
// Conta quantos caracteres no início de str1 não são '0', '1' ou '3'
len = strcspn(str1, str2);
printf("Comprimento da primeira parte que nao contem caracteres de str2 eh %d\n", len);
return(0);
}
Saída esperada
Comprimento da primeira parte que nao contem caracteres de str2 eh 10
char *strerror(int errnum)
Pesquisa em uma matriz interna pelo número do erro errnum e retorna um
ponteiro para a string com a mensagem de erro correspondente.
Exemplo
// EXEMPLO STRERROR()
#include <math.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main(){
// Tentar calcular log de número negativo gera erro de domínio
printf("log(-1.0) = %f\n", log(-1.0));
printf("Erro de número %d obtido!\n", errno);
printf("Descrição do erro: %s\n\n", strerror(errno));
// Tentar calcular log de zero gera erro de intervalo (range)
printf("log(0.0) = %f\n", log(0.0));
printf("Erro de número %d obtido!\n", errno);
printf("Descrição do erro: %s\n", strerror(errno));
return 0;
}
Saída esperada
log(-1.0) = nan
Erro de número 33 obtido!
Descrição do erro: Numerical argument out of domain
log(0.0) = -inf
Erro de número 34 obtido!
Descrição do erro: Numerical result out of range
size_t strlen(const char *fonte)
Calcula o comprimento da string apontada por fonte, não incluindo o caractere
nulo terminador (\0).
Exemplo
// EXEMPLO STRLEN()
#include <stdio.h>
#include <string.h>
int main() {
char stringA[] = "PET - BCC";
char stringB[] = "Computacao UFSCar";
printf("String A: %s\n", stringA);
printf("Tamanho da string A: %lu\n\n", (unsigned long)strlen(stringA));
printf("String B: %s\n", stringB);
printf("Tamanho da string B: %lu\n", (unsigned long)strlen(stringB));
return 0;
}
Saída esperada
String A: PET - BCC
Tamanho da string A: 9
String B: Computacao UFSCar
Tamanho da string B: 17
char *strpbrk(const char *fonte, const char *comparacao)
Localiza a primeira ocorrência na string fonte de qualquer um dos caracteres
presentes na string comparacao.
Exemplo
// EXEMPLO STRPBRK()
#include <stdio.h>
#include <string.h>
int main() {
char fonte[] = "Programa de Ensino e Tutoria - BCC/UFSCar";
char comparacao[] = "aeiou";
printf("String 'fonte': \n%s\n\n", fonte);
printf("String 'comparacao':\n%s\n\n", comparacao);
char *retorno = strpbrk(fonte, comparacao);
if (retorno) {
printf("String após a primeira ocorrência de uma vogal: %s\n", retorno);
}
return 0;
}
Saída esperada
String 'fonte':
Programa de Ensino e Tutoria - BCC/UFSCar
String 'comparacao':
aeiou
String após a primeira ocorrência de uma vogal: ograma de Ensino e Tutoria - BCC/UFSCar
char *strrchr(const char *fonte, int caractere)
Procura pela última ocorrência do caractere caractere (convertido para char) na string apontada por fonte.
Exemplo
// EXEMPLO STRRCHR()
#include <stdio.h>
#include <string.h>
int main() {
int caractere = 'a';
char fonte[] = "Programa de Ensino e Tutoria - BCC";
printf("Localizar a última letra '%c' na frase: %s\n", caractere, fonte);
char *resultado = strrchr(fonte, caractere);
if(resultado != NULL) {
printf("\nCaractere '%c' encontrado!\n", caractere);
printf("String a partir da última ocorrência: %s\n", resultado);
} else {
printf("\nCaractere '%c' não encontrado!\n", caractere);
}
return 0;
}
Saída esperada
Localizar a última letra 'a' na frase: Programa de Ensino e Tutoria - BCC
Caractere 'a' encontrado!
String a partir da última ocorrência: a - BCC
size_t strspn(const char *fonte, const char *comparacao)
Calcula o comprimento do segmento inicial de fonte que consiste inteiramente
de caracteres presentes na string comparacao.
Exemplo
// EXEMPLO STRSPN()
#include <stdio.h>
#include <string.h>
int main() {
char fonteA[] = "198462-PET-BCC/UFSCar";
char fonteB[] = "PET-BCC/UFSCar-198462";
char comparacao[] = "0123456789";
printf("String 'fonteA':\n%s\n\n", fonteA);
printf("String 'fonteB':\n%s\n\n", fonteB);
printf("String 'comparacao':\n%s\n\n", comparacao);
printf("Há um total de %lu dígitos iniciais na string fonteA.\n", (unsigned long)strspn(fonteA, comparacao));
printf("Há um total de %lu dígitos iniciais na string fonteB.\n", (unsigned long)strspn(fonteB, comparacao));
return 0;
}
Saída esperada
String 'fonteA':
198462-PET-BCC/UFSCar
String 'fonteB':
PET-BCC/UFSCar-198462
String 'comparacao':
0123456789
Há um total de 6 dígitos iniciais na string fonteA.
Há um total de 0 dígitos iniciais na string fonteB.
char *strstr(const char *fonte, const char *comparacao)
Localiza a primeira ocorrência da string completa comparacao dentro da string
fonte.
Exemplo
// EXEMPLO STRSTR()
#include <stdio.h>
#include <string.h>
int main(){
char *ponteiro;
char fonte[] = "Programa de Ensino e Tutoria - BCC";
char comparacao[] = "Ensino";
printf("String 'fonte':\n%s\n\n", fonte);
printf("Substring 'comparacao':\n%s\n\n", comparacao);
ponteiro = strstr(fonte, comparacao);
if(ponteiro != NULL){
printf("Substring encontrada!\n");
// A aritmética de ponteiros (ponteiro - fonte) resulta no índice
printf("Substring inicia na posição %ld\n", (long)(ponteiro - fonte));
} else {
printf("Substring não encontrada!\n");
}
return 0;
}
Saída esperada
String 'fonte':
Programa de Ensino e Tutoria - BCC
Substring 'comparacao':
Ensino
Substring encontrada!
Substring inicia na posição 12
char *strtok(char *fonte, const char *delimitadores)
Divide uma string em uma sequência de tokens (sub-strings) com base em caracteres delimitadores especificados.
Exemplo
// EXEMPLO STRTOK()
#include <stdio.h>
#include <string.h>
int main(){
char fonte[] = "Programa de.Ensino e#Tutoria-BCC-UFSCar";
char delimitadores[] = "-.#"; // Note que o espaço não está aqui, então "Programa de" fica junto
printf("String 'fonte':\n%s\n\n", fonte);
printf("String 'delimitadores':\n%s\n\n", delimitadores);
// Primeira chamada: passa a string original
char *resultado = strtok(fonte, delimitadores);
while(resultado != NULL){
printf("%s\n", resultado);
// Chamadas subsequentes: passa NULL para continuar de onde parou
resultado = strtok(NULL, delimitadores);
}
return 0;
}
Saída esperada
String 'fonte':
Programa de.Ensino e#Tutoria-BCC-UFSCar
String 'delimitadores':
-.#
Programa de
Ensino e
Tutoria
BCC
UFSCar