Ir ao conteúdo
  • Cadastre-se

C Programa de arquivos, o printf("%s") imprimindo coisa estranha


Aoi Todo
Ir à solução Resolvido por Ansi C,

Posts recomendados

  • Membro VIP

Olá, eu estava fazendo um programa para aprender a mexer com arquivos, e notei que quando imprimo algumas strings, em certos lugares saem coisas estranhas, gostaria de entender o por que disso. Agradeço quem puder me ajudar. Este é o meu código (coloquei comentários com asterisco na parte que imprime estranho):

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

// esse programa tem como objetivo apreender a mexer com arquivos (abrir, fechar, ler e escrever), com os comandos fopen, fclose, fgetc e fputc
int main(){
	FILE *pTexto;
	char anel[116]= "Um Anel para a todos governar, Um Anel para encontra-los, Um Anel para a todos trazer e na escuridao aprisiona-los ";
	char anelLeitura[116];
	char anelLeitura2[116];
	char anelLeitura3[116];
	int cont;
	pTexto = fopen("sauron.txt","w");
	if( pTexto == NULL ){
		printf("erro ao abrir o arquivo \n");
		exit(1);
	}
	for( cont = 0 ; cont <= 200 ; cont++ ){
		fputc( anel[cont] , pTexto );
		}
	fclose(pTexto);
	pTexto = NULL;
	pTexto = fopen("sauron.txt","r");
	for( cont = 0 ; cont <= 115; cont++ ){
		anelLeitura[cont] = fgetc(pTexto);
	}
	fclose(pTexto);
	pTexto = NULL;	
	printf("\nLEITURA 1.0:%s\n",anelLeitura);
	fclose(pTexto);

	// a parte a baixo é igual a parte de leitura a cima, porém e foi usada 
	//a constante EOF 
	pTexto = NULL;
	pTexto = fopen("sauron.txt","r");
	if( pTexto == NULL ){
		printf("erro ao abrir o arquivo \n");
		exit(1);
	}
	printf("\nLEITURA 1.1:%s\n",anelLeitura);
	
	for( cont = 0 ; ( anelLeitura2[cont] = fgetc(pTexto) )!= EOF ; cont++ ){ // acontece enquanto anelLeitura2[cont] for diferente de EOF,
	} // aqui o valor fgetc(pTexto) eh atribuido a variavel anelLeitura[cont] e entao eh verificado se esse valor eh diferente de EOF

	printf("\nLEITURA 1.2:%s\n",anelLeitura);// COISA ESTRANHA É IMRPIMIDA !!******************************************
	fclose(pTexto);
	pTexto = NULL;	
	printf("\nLEITURA 2.0%s\n",anelLeitura2);
	printf("\nLEITURA 1.3:%s\n",anelLeitura);// COISA ESTRANHA É IMRPIMIDA !! ******************************************


	// outra alternativa é usar o comando e feof(). Esse comando e util , pois em arquivos binarios um inteiro no meio do arquivo pode ter o valor igual a  null
	// o que indicaria o fim do arquivo sem chegar no final do arquivo
	pTexto = NULL;
	pTexto = fopen("sauron.txt","r");
	if( pTexto == NULL ){
		printf("erro ao abrir o arquivo \n");
		exit(1);
	}
	printf("\nLEITURA 2.1%s\n",anelLeitura2);
	printf("\nLEITURA 1.4:%s\n",anelLeitura);// COISA ESTRANHA É IMRPIMIDA !!******************************************
	for( cont = 0 ; !feof(pTexto) ; cont++ ){ // feof() retorna 0, quando nao se esta no final do arquivo, e retorna algo diferente de 0 quando se esta no final
		anelLeitura3[cont] = fgetc(pTexto);
	}
	fclose(pTexto);
	pTexto = NULL;	
	printf("\nLEITURA 3:%s\n",anelLeitura3); 
	printf("\nLEITURA 1.5:%s\n",anelLeitura);// COISA ESTRANHA É IMRPIMIDA !!******************************************
	printf("\nLEITURA 2.2:%s\n",anelLeitura2);// COISA ESTRANHA É IMRPIMIDA !!******************************************
	
	return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@Arthur Vandellay O que é uma string em C, qual a diferença entre um vetor de caracteres e uma strings na linguagem C? Essa não é uma pergunta difícil, longe disso, não é nenhuma novidade é coisa velha d+, e vai te auto-educar com relação a seu problema. 

 

Muito fácil.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Muito obrigado @AnsiC, consegui fazer funcionar, fui pesquisar a diferença e ai resolvi.

Se alguém quiser ver como o código ficou, esta aqui:

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

// esse programa tem como objetivo apreender a mexer com arquivos (abrir, fechar, ler e escrever), com os comandos fopen, fclose, fgetc e fputc
int main(){
	FILE *pTexto;
	char anel[115]= "Um Anel para a todos governar, Um Anel para encontra-los, Um Anel para a todos trazer e na escuridao aprisiona-los";
	char anelLeitura[115];
	char anelLeitura2[115];
	char anelLeitura3[115];
	int cont;
	pTexto = fopen("sauron.txt","w");
	if( pTexto == NULL ){
		printf("erro ao abrir o arquivo \n");
		exit(1);
	}
	/*for( cont = 0 ; cont <= 200 ; cont++ ){
		fputc( anel[cont] , pTexto );
	}*/
	for( cont = 0 ; cont <= 113; cont++ ){
		fputc( anel[cont] , pTexto );
	}
	fclose(pTexto);
	pTexto = NULL;
	pTexto = fopen("sauron.txt","r");
	for( cont = 0 ; cont <= 113; cont++ ){
		anelLeitura[cont] = fgetc(pTexto);
		
	}
	anelLeitura[cont]= '\0';
	fclose(pTexto);
	pTexto = NULL;	
	printf("\nLEITURA 1.0:%s\n",anelLeitura);
	fclose(pTexto);

	// a parte a baixo é igual a parte de leitura a cima, porém e foi usada 
	//a constante EOF para nao precisar determinar o tamanho do arquivo no for
	// EOF = end of file, dado que representa fim do arquivo, geralmente é -1
	pTexto = NULL;
	pTexto = fopen("sauron.txt","r");
	if( pTexto == NULL ){
		printf("erro ao abrir o arquivo \n");
		exit(1);
	}
	printf("\nLEITURA 1.1:%s\n",anelLeitura);
	
	for( cont = 0 ; ( anelLeitura2[cont] = fgetc(pTexto) )!= EOF ; cont++ ){ // acontece enquanto anelLeitura2[cont] for diferente de EOF,
	} // aqui o valor fgetc(pTexto) eh atribuido a variavel anelLeitura[cont] e entao eh verificado se esse valor eh diferente de EOF
	anelLeitura2[cont] = '\0';
	printf("\nLEITURA 1.2:%s\n",anelLeitura);// COISA ESTRANHA NAO E IMRPIMIDA ^^
	fclose(pTexto);
	pTexto = NULL;	
	printf("\nLEITURA 2.0%s\n",anelLeitura2);
	printf("\nLEITURA 1.3:%s\n",anelLeitura);// COISA ESTRANHA NAO E IMRPIMIDA ^^


	// outra alternativa é usar o comando e feof(). Esse comando e util , pois em arquivos binarios um inteiro no meio do arquivo pode ter o valor igual a  null
	// o que indicaria o fim do arquivo sem chegar no final do arquivo
	pTexto = NULL;
	pTexto = fopen("sauron.txt","r");
	if( pTexto == NULL ){
		printf("erro ao abrir o arquivo \n");
		exit(1);
	}
	printf("\nLEITURA 2.1%s\n",anelLeitura2);
	printf("\nLEITURA 1.4:%s\n",anelLeitura);// COISA ESTRANHA NAO E IMRPIMIDA ^^
	for( cont = 0 ; !feof(pTexto) ; cont++ ){ // feof() retorna 0, quando nao se esta no final do arquivo, e retorna algo diferente de 0 quando se esta no final
		anelLeitura3[cont] = fgetc(pTexto);
	}
	anelLeitura3[cont] = '\0';
	fclose(pTexto);
	pTexto = NULL;	
	printf("\nLEITURA 3:%s\n",anelLeitura3); 
	printf("\nLEITURA 1.5:%s\n",anelLeitura);// COISA ESTRANHA NAO E IMRPIMIDA ^^
	printf("\nLEITURA 2.2:%s\n",anelLeitura2);// COISA ESTRANHA NAO E IMRPIMIDA ^^
	
	return 0;
}

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!