Inteiros e Strings na linguagem C

Neste artigo veremos como é fácil trabalhar com variáveis na linguagem C.

[ Hits: 25.368 ]

Por: André em 20/04/2010 | Blog: http://127.0.0.1


Variáveis do tipo string



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.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Variáveis do tipo inteiro
   3. Variáveis do tipo string
   4. Conclusão
Outros artigos deste autor

Recuperando arquivos em um Windows corrompido com Linux

Trabalhando com classes e métodos em Java (parte 2)

Introdução ao Fortran (parte 1)

O phishing e uma análise forense

OpenSUSE - Uma ótima opção de distribuição

Leitura recomendada

Introdução à ponteiros em C

Introdução à linguagem C - Parte III

Vírus de computador e criação de um vírus em C/C++ (parte 1 - básico)

Introdução à linguagem C - Parte I

Liberando Memória ajustando o Tamanho das Strings em C

  
Comentários
[1] Comentário enviado por andrezc em 20/04/2010 - 11:49h

Só uma correção pessoal, houve um erro onde eu disse variáveis do tipo string. O correto seria variáveis do tipo char.

Mil desculpas.

[2] Comentário enviado por master_linux em 24/04/2010 - 15:45h

Não não, o correto não seria "variável do tipo char". O correto seria "variável do tipo array", um array de char, ou seja, uma string representada por um array de caracteres.

[3] Comentário enviado por fabiocostainfo em 03/05/2012 - 21:33h

Só para complementar a variável do tipo char em C é só declara-la como um vetor e informar quantos carácter esse vetos char irá suportar pelo programa.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts