Inteiros e Strings na linguagem C

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

[ Hits: 25.412 ]

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

Instalando e utilizando o LimeWire no Debian

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

O phishing e uma análise forense

Introdução a LUA, uma poderosa linguagem de programação

Variáveis, if, else e unless em Ruby

Leitura recomendada

O ? Alternativo em C/C++

Operadores com a linguagem C

Estudo de ponteiros para GNU/Linux

Introdução à ponteiros em C

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

  
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