Ir para conteúdo

Arquivado

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

Ennio Sousa

Função em C se comportando estranho

Recommended Posts

Estou fazendo um código em C, aparentemente nenhum erro, pelo menos a sintaxe e o copilador não aponta isso.

 

Eu fiz uma função para ler um string e atribuir a uma variável, até aí funciona, porem quando usar a mesma função em outra variável, o valor da última variável é aplicado a todas lidas anteriormente.

o código é este:

#include <stdio.h>
#include <string.h>

char* ler_str(int);

int main(){

	
	int flag;
   char *frase1, *frase2;
 
	printf("\nprimeiro frase\n");
	frase1 = ler_str(999);
	printf("\nmostar frase1: %s\n",frase1);
	
	printf("\nsegunda frase\n"); 
	frase2 = ler_str(998);
	printf("\nmostar frase2: %s\n",frase2);
	
	printf("\n--------------------------\n");
	printf("\nmostar frase1: %s\n",frase1);
	printf("\nmostar frase2: %s\n",frase2);
	
   return 0;
}

char* ler_str(int tam){
	fflush(stdin);
	char frase[tam];
    scanf("%[^\n]s",frase);
	return frase;
}

Ficarei grato se alguém me der uma luz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

E dá-lhe fflush(stdin)....
http://forum.imasters.com.br/topic/336835-tutorial-systempause-e-fflushstdin/
(Quase me convertendo numa espécie de Lutero pra pregar recomendações nas portas dos cursos de computação em faculdade)

 

frase.c:30:2: warning: function returns address of local variable [-Wreturn-local-addr]
return frase;

Não é legal retornar endereços locais. Dê uma olhada no assunto "escopo de variáveis".

 

O problema é que o \n inserido no final da primeira frase (afinal, você pressiona ENTER) é passado pra frente no printf. P/ ler frases você tem duas opções (as mais fáceis):

1- use fgets (é necessário substituir o \n no final da string por \0, pois o fgets captura o ENTER que você pressiona). Essa é a mais recomendada pelo povo aqui do fórum.
2- se quiser usar o scanf, escreva scanf("%[^\n]%*c",frase)

Eu ficaria com o fgets porque o scanf, assim como o gets, tem problemas com buffer overflow: http://stackoverflow.com/questions/1621394/how-to-prevent-scanf-causing-a-buffer-overflow-in-c

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.