• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Halaster

[Resolvido] Obtenção de caracteres duma string

13 mensagens neste tópico

Boas!!

O meu problema é o seguinte:

Eu tenho uma string deste género "................................", e queria atribuir a uma variável temporária(char), um caractere para depois o comparar com outro e inserir o valor numérico correspondente num array[linhas][colunas], mas não sei como é que conseguirei ler o caractere e atribuí-lo à variável temporária. :confused::P

Será que me podem ajudar?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
int cont=0;
char temp;
while (cont<strlen(string)) {
  temp=string[cont];
  /* Aqui fica a parte do code para a comparação e atribuição a matriz
  Nao percebi bem o que queres fazer mas pelo que percebi so tinhas duvida com a atribuição
  ve se isto te ajuda senão avisa que volto a postar (mas desta vez faz-te entender um pouco melhor*/
  ++cont;
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
int i;
char s[30];
gets(s);
for (i=0;i<strlen(s);i++) {
//tens aqui o ciclo para percorrer a string, a cada iteração o caracter correspondente ficará guardado na variável s[i]
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é um erro usar

gets

eu nao gosto de usar... :dontgetit:

mas pq dizes isso??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Erro? Acho que até pelo contrario

enquanto que o scanf("%s",s) só lê uma palavra, o gets(s) lê uma linha. O que usarias em sua vez?

fgets() ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu também considero um erro usar o gets.

Isto porque ao usar o gets ele guarda os caracteres todos até encontrar um \n.

Ora isso pode ser perigoso principalmente se usarmos shared memory, pois imaginem que teem uma variavel que lê as iniciais de um clube de futebol por exemplo. Pedimos ao user para inserir as iniciais, e guardamos num char inicias[5]. Se o user escrever o nome completo em vez das iniciais, por exemplo Vitória de Guimarães, não vai ficar unicamente gravado na variavel "Vitór", mas sim tudo o que foi introduzido.

Resumindo usando o gets corremos o risco de a variavel a ser lida ocupe o espaço destinado a outras variáveis, podendo modifica-las. O melhor mesmo será o fgets :hmm:.

Espero ter sido ilucidativo.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso de buffers overflow é um problema já inerente ao C.. mas sim, quando sugeri o fgets foi exactamente por esse motivo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

gostei imenso deste tópico, agora expliquem-me só a diferença do fgets para o gets sff :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso de buffers overflow é um problema já inerente ao C.. mas sim, quando sugeri o fgets foi exactamente por esse motivo.

Pode ser inerente a C mas não é inerente ao programador, alias nem sequer devia existir gets mas apenas fgets, existem outros casos que podem causar seg faults, ex: usar getwd em vez de getcwd

gcc -Wall pap.c

/var/tmp//ccFnSJyg.o(.text+0x24): In function `main':

: warning: warning: this program uses gets(), which is unsafe.

Sequer pensar usar o gets é uma estupidez, podes usar o fgets ou podes usar caracter a caracter ate atingir um maximo ou encontrar um \n antes.

O uso de fgets por vezes pode dar asneira a principiantes pois no caso de no input tentar-se meter strings maiores que o que aceita o fgets o resto dos caracteres ficam estilo pendente, sendo assim seram lidos pelo próximo fgets!

Existem maneiras de suprimir esse lixo incluindo mudar a forma como esta a ser feito o input, por defeiro o input é feito até receber um enter mas é possivel modificar isso. :)

NOTA:

Quando falei do getwd é possível usa-lo com segurança se usarmos a biblioteca limits.h e fizermos uma declaração da string do genero char variavel[PATH_MAX];

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

para quem não sabe, pode limpar os caracteres pendentes, como disse o entering, usando o fflush(stdin);

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O fflush() só deve ser usado em streams de escrita. O objectivo é escrever efectivamente na stream dados que estejam em memória (buffering). fflush(stdin) é um uso errado e não faz nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora