Jump to content

[Resolvido] Obtenção de caracteres duma string


Halaster
 Share

Recommended Posts

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. 😕:P

Será que me podem ajudar?

Link to comment
Share on other 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;
}
Link to comment
Share on other 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]
}
Link to comment
Share on other 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 ?.

Espero ter sido ilucidativo.

Cumps

Link to comment
Share on other 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];

Link to comment
Share on other 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.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.