Obra: Programar em C/Strings
strings strings inglês são cadeias ou seqüências ordenadas de caracteres na verdade já trabalhamos com strings neste livro mas preferimos deixar maiores explicações para um momento em que já tivesse sido introduzido conceito de vetor linguagem ao contrário de outras linguagens de programação não possui um tipo de dados correspondente às strings no lugar usam se vetores ponteiros como veremos mais adiante em strings são vetores de caracteres terminados pelo caractere nulo por exemplo char nome no entanto escrever strings dessa maneira muito trabalhoso por isso foi criada uma notação abreviada que equivale notação acima elimina necessidade de colocar caractere terminador char nome pedro assim como nos vetores podemos acessar modificar elementos individuais de uma string podemos também diminuir tamanho de uma string uma vez que única marcação do tamanho terminador colocar um terminador em outro local determinará novo final da string no entanto aumentar tamanho da string mais difícil isso ficará para outra seção atenção ao usar se acentos numa string como existem diferentes formas de codificar caracteres acentuados tratamento de uma string do tipo char nome joão pode ser diferente de uma máquina para outra neste capítulo não serão tratados acentos este assunto será abordado mais adiante funções da biblioteca padrão biblioteca padrão fornece várias funções úteis para manipular strings seguir mostraremos algumas delas para usá las você deve incluir cabeçalho string no início dos seus arquivos strlen strlen retorna tamanho em caracteres de uma string dada na verdade strlen procura terminador de string calcula distância dele ao início da string por exemplo char nome maria da silva int strlen nome conterá valor strcpy strcpy copia conteúdo de uma string para outra coloca um terminador de string sua sintaxe strcpy destino origem char nome clarice lispector char nome oswald de andrade strcpy nome nome agora nome conterá oswald de andrade tome cuidado com strcpy pois se string ser copiada for maior que string de destino provavelmente você gravará dados em lugares indesejados um problema conhecido como estouro de buffer para evitar esse problema use função strncpy que recebe um terceiro argumento que corresponde ao número máximo de caracteres serem copiados char msg bom dia char nome maria da silva strncpy msg nome strlen msg agora msg conterá maria da strcat strcat concatena duas strings adicionando conteúdo da segunda ao final da primeira além do terminador note que primeira string deve ter espaço suficiente para conter segunda para que não ocorra um estouro de buffer por exemplo char nome maria char sobrenome da silva strcat nome sobrenome agora nome contém maria da silva analogamente função strncpy existe também função strncat onde número máximo de caracteres serem copiados terceiro argumento strcmp se você tentar criar duas strings com mesmo conteúdo compará las como faria como números verá que elas não são iguais isso ocorre porque na verdade que está s
rá las como faria como números verá que elas não são iguais isso ocorre porque na verdade que está sendo comparado são os endereços de memória onde estão guardadas as strings para comparar conteúdo de duas strings você deve usar função strcmp ou suas variantes int strcmp char char valor de retorno menor que zero se for menor que igual zero se são iguais maior que zero se for maior que costuma parecer estranho dizer que uma string menor ou maior que outra na verdade essa comparação entre primeira letra que difere nas duas strings assim se tivermos abc abd diremos que maior que pois na primeira posição em que as duas strings diferem letra em maior importante notar que comparação feita por strcmp distingue maiúsculas de minúsculas isto as strings abc abc não são iguais para essa função as variantes mais usadas de strcmp são strncmp compara apenas os primeiros caracteres das duas strings sendo um terceiro argumento stricmp compara duas strings sem distinção entre maiúsculas minúsculas sintaxe igual de strcmp essa função não faz parte da biblioteca padrão mas comumente encontrada como extensão particular de várias delas strrchr strrchr retorna um ponteiro sobre última ocorrência de de uma string apontada por se não retorna null sua sintaxe strrchr const char int exemplo char path teste string char strrchr path printf resultado memcpy sintaxe include void memcpy void dest const void srce size_t descrição copiar um bloco de octetos de srce para dest atenção se as regiões de srce dest se sobreporem comportamento da função imprevisível valor de retorno memcpy retorna valor de dest ex include include int main int tab int temp memcpy temp tab sizeof tab puts resultado printf temp temp return memset sintaxe include void memset void buffer int size_t descrição memset inicializa octetos do buffer com inteiro valor de retorno valor do buffer ex include include int main char buf printf buf antes memset buf memset buf strlen buf printf buf depois memset buf return sprintf descrição diferença entre printf sprintf que printf retorna resultado para saída padrão tela enquanto sprintf retorna resultado em uma variável isto muito conveniente porque você pode simplesmente digitar frase que você quer ter sprintf lida com própria conversão coloca resultado na string que você deseja sintaxe include int sprintf char const char formato ex include include int main char var char sobrenome simpson char nome homer int idade sprintf var tem anos sobrenome nome idade printf resultado var return strcoll descrição uma string de comparação uma string de comparação retorna um valor após comparação caractere caractere das duas strings com base no lc_collate de forma detalhada função compara primeiro caractere da stringa com primeiro caractere da stringb caso sejam iguais ele parte para segundo caractere isso se repete até que ocorra uma divergência ou quando caractere terminal encontrado em qualquer uma das strings exemplo de uso da função include include int main char stringa computac
em qualquer uma das strings exemplo de uso da função include include int main char stringa computacao char stringb computador printf string stringa printf string stringb printf valor da primeira comparação strcoll stringa stringb char stringc bcc char stringd bcc printf string stringc printf string stringd printf valor da segunda comparação strcoll stringc stringd return saída do terminal main string computacao string computador valor da primeira comparação string bcc string bcc valor da segunda comparação