Pular para o conteúdo

incremento de for sai multiplicado

Responder tópico
  • Denunciar
  • Indicar

1. incremento de for sai multiplicado

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]!='\0';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?

Responder tópico

2. Re: incremento de for sai multiplicado

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

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

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

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

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

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

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

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...

Responder tópico

Responder tópico

Entre na sua conta para responder.

Fazer login para responder