String é utilizado para pegar palavras, melhor dizendo frases. Aqui, de cara, faremos um programa simples, que pede alguns dados para o usuário, e depois retorna estes mesmos dados.
Só que tem um porém, mexer com strings pode ser perigoso em alguns detalhes. Estaremos explicando "alguns" destes perigos a seguir.
Vamos ver um simples programa:
#include <stdio.h>
int main()
{
char x[100];
char y[100];
printf("Entre com seu nome: ");
gets(x);
printf("Entre com seu sobrenome: ");
gets(y);
printf("Seu nome completo e : %s %s. \n\n",x,y);
return (0);
}
Compile e execute. Ele lhe retornará algo como:
./1
Entre com seu nome:
Andre
Entre com seu sobrenome:
Junior
Seu nome completo e : Andre Junior
O que foi feito:
Declaramos duas bibliotecas do tipo char, chamadas x e y, e do tamanho 100.
char x[100];
char y[100];
Logo abaixo, na função:
printf()
Solicitamos o nome do usuário e pegamos a string digitada por ele com a função:
gets()
O resto do código vocês já conhecem, pois eu já havia explicado.
Funcionou? Sim, mas o código está vulnerável. Como assim? Estão vendo aquele gets()? Ele é o problema.
Vou mostrar a vocês um exemplo de falha causado pelo gets().
Compilem o código abaixo:
#include <stdio.h>
int main()
{
char x[5];
printf("Entre com seu nome: ");
gets(x);
printf("Seu nome e : ",x);
return (0);
}
E depois, quando ele solicitar seu nome, ponha um com mais de 5 (cinco) caracteres e vejam o que acontece.
./1
Entre com seu nome:
Van-Halen
Falha de segmentação
Porque isso ocorreu?
Digitamos uma string maior que 5 caracteres, que era o tamanho máximo suportado pela variável x, daí deu essa falha no programa, o que é muito comum pelos iniciantes em programação.
Mas e se eu usasse scanf() da forma:
scanf("%s",&x);
Funcionaria? Não! Pois o tamanho da string ainda está lá. :-)
Mas se eu colocar 1000 como tamanho, vai suportar?
Sim, suportará até 1000 caracteres, mas e aí? Vai mesmo ficar tentando adivinhar o máximo de tamanho da string que o usuário vai digitar? Tem uma solução bem interessante para isso aí, que é o fgets(). Aqui no Viva o
Linux já tem uma dica sobre ele, aconselho que dêem uma olhada:
Enfim, agora para concluir, vamos criar uma string que já contenha o seu valor.
#include<stdio.h>
int main()
{
char x[] = "Robert Plant";
char y[] = "Led Zeppelin";
printf(" %s, %s. \n\n",x,y);
return (0);
}
Neste caso eu dei o valor as variáveis x e y e imprimi eles com %s para strings.