incremento de for sai multiplicado

1. incremento de for sai multiplicado

Lucas Ribeiro
eunix

(usa Debian)

Enviado em 23/01/2013 - 23:27h

Oi povo,

eu escrevi um código simples. E, nele, eu precisava ver o tamanho de uma string, foi então que a função strlen() já tava dando problema, por isso resolvi criar um stringômetro por conta própria, igual o dono do strlen().

Fiz assim:


int main(){

int tamanho; //da string
char string; //a string
char *ponteiro = &string; //para o for

printf("\n\tString: "); //indica onde
scanf("%s",&string); //entra string
for(tamanho=0;ponteiro[tamanho]!='{TTEXTO}';tamanho++); //{texto} = /0

printf("\n\t tamanho = %d\n",tamanho); //mostra o tamanho

return(0); //retorna nada
}


O resultado do código dava sempre um múltiplo do comprimento da string, geralmente x2 ou x5, mas na última instância: deu um não múltiplo e eu fiquei com cara de tacho.

Alguém pode me ajudar?


  


2. Re: incremento de for sai multiplicado

Paulo
paulo1205

(usa Ubuntu)

Enviado em 23/01/2013 - 23:38h

Note que, apesar do nome, você não declarou a variável string como string, mas sim como algo que guarda um caráter só. Ao ler mais do que um caráter na chamada a scanf(), o que acontece é que o programa grava os caracteres adicionais por cima de outras variáveis. Nesse caso, é imprevisível o que vai acontecer ao final da execução do programa.


3. Re: incremento de for sai multiplicado

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 24/01/2013 - 13:30h

Você não declarou string como uma string "de verdade."


Tenta assim:




char string[100];

scanf("%s", string );

for ( tamanho=0; string[tamanho] != 0x0; tamanho++ ) ;

printf ( "Tamanho: %d\n", tamanho );



Qualquer dúvida posta denovo.
[]'s
Enzo Ferber


4. Re: incremento de for sai multiplicado

Enzo de Brito Ferber
EnzoFerber

(usa FreeBSD)

Enviado em 24/01/2013 - 13:30h

Você não declarou string como uma string "de verdade."


Tenta assim:




char string[100];

scanf("%s", string );

for ( tamanho=0; string[tamanho] != 0x0; tamanho++ ) ;

printf ( "Tamanho: %d\n", tamanho );



Qualquer dúvida posta denovo.
[]'s
Enzo Ferber


5. Re: incremento de for sai multiplicado

Jose Renan Assis
JoseRenan

(usa Ubuntu)

Enviado em 24/01/2013 - 16:19h

EnzoFerber escreveu:

Você não declarou string como uma string "de verdade."


Tenta assim:




char string[100];

scanf("%s", string );

for ( tamanho=0; string[tamanho] != 0x0; tamanho++ ) ;

printf ( "Tamanho: %d\n", tamanho );



Qualquer dúvida posta denovo.
[]'s
Enzo Ferber


+1


6. Valeu galera

Lucas Ribeiro
eunix

(usa Debian)

Enviado em 24/01/2013 - 16:29h

Puxa! De baixo do meu nariz!
Se bem que ele é grande, né...

Agora vou por o código numa função não main, e vou para o próximo passo.
Valeu galera


7. Re: incremento de for sai multiplicado

Elgio Schlemer
elgio

(usa OpenSuSE)

Enviado em 24/01/2013 - 16:49h

Considere também o fato do scanf não ser o mais indicado para ler string. Da forma como foi usado ele irá párar a leitura no primeiro espaço em branco. Também, da forma como foi usado, não controla buffer overflow. Mesmo a string podendo suportar 99 caracteres (na versão proposta pelos colegas) o scanf permitirá avançar além deste número, causando overflow.

Considere o uso da função fgets que lê espaço e controla o tamanho máximo.

http://www.vivaolinux.com.br/artigo/Parametros-interessantes-do-scanf-e-do-printf-em-C/

http://www.vivaolinux.com.br/script/Lendo-strings-em-C


8. ponteiro em argumento de função não-main

Lucas Ribeiro
eunix

(usa Debian)

Enviado em 24/01/2013 - 21:55h

Amigo elgio,

parabéns pelo garoto.

Eu tenho um pouco de preconceito com fgets() porque ele parece um pouco com o execrado gets(), que faz a teclas darem choque.
O código que estou fazendo é para converter a string inserida em uma senha, através de um processo matemático: parece improvável que eu queira criar uma senha com mais de 99 caracteres.
Com relação ao caractere espaço, eu uso scanf("%[^\n]s",&string[]), até agora deu certo. E esse fgets() é bonzinho mesmo?
Só vou demorar um pouco para terminar porque ainda estou engatinhando, rsrs...


9. ponteiro em argumento de função não-main

Lucas Ribeiro
eunix

(usa Debian)

Enviado em 24/01/2013 - 21:55h

Amigo elgio,

parabéns pelo garoto.

Eu tenho um pouco de preconceito com fgets() porque ele parece um pouco com o execrado gets(), que faz a teclas darem choque.
O código que estou fazendo é para converter a string inserida em uma senha, através de um processo matemático: parece improvável que eu queira criar uma senha com mais de 99 caracteres.
Com relação ao caractere espaço, eu uso scanf("%[^\n]s",&string[]), até agora deu certo. E esse fgets() é bonzinho mesmo?
Só vou demorar um pouco para terminar porque ainda estou engatinhando, rsrs...






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts