Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

lucasescobarr

Exibir inteiro obtido mediante loop FOR

Recommended Posts

Pessoal, bons dias...

 

Tenho um loop for, sem bloco, que percorre uma string armazenando o valor do último índice na variável "tam", declarada fora do loop, no início do código. Logo após uma função printf() tenta apresentar o valor armazenado em tam.

 

Mas o compilador, sem mensagens de erro, pára antes do loop, quando uma printf() repete a string para confirmar que a armazenou corretamente. Eis abaixo:

#include <stdio.h>
#include <stdlib.h>

int main(){
    char string;
    char *pstr = &string;
    int tam = 0;

    printf("\nDigite a string: ");
    scanf("%[^\n]s", &string);
    printf("String digitada: %s\n", &string);
    for(tam = 0; pstr[tam]!='\0'; tam++);
    printf("\n%d caracteres...",tam);

    return 0;
}

E o compilador exibe:

    Digite a string: string com espaço
    String digitada: string com espaço

Alguém pode me dizer onde foi queu errei?!

 

Agradecimento

Lucas Ribeiro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dê uma olhada mais atenta ao seu código: "char string" não vai dar muito certo com "%s".

No meu sistema (OpenSuse, gcc 4.7.1) deu falha de segmentação. Rodando o valgraind (ferramenta p/ detecção de memory leaks) aparece isso:

 

Invalid read of size 1

at 0x80484F2: main (lucasescobarr.c:12)

Address 0x6e697274 is not stack'd, malloc'd or (recently) free'd

 

Quando alterei seu programa da forma seguinte, deu certo:

 

 

#include <stdio.h>
#include <stdlib.h>
 
int main(void) {
   char * string = (char *)malloc(sizeof(char) * 255);
   int tam = 0;
 
   printf("\nDigite a string: ");
   scanf("%[^\n]s", string);
   printf("String digitada: %s\n", string);
   for(tam = 0; string[tam]!='\0'; tam++);
   printf("\%d caracteres...", tam);
 
   free(string);
   string = NULL;
 
   return 0;
}

 

 

Lembrando que o header string.h possui a função strlen, que faz a mesma coisa que o seu loop for.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.