• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Edelf

[Resolvido] Falha de segmentção (core dumped)

11 mensagens neste tópico

Boas!!

precisava aqui de uma maozinha neste codigo...nao pára de me dar "Falha de segmentção (core dumped)"

alguem consegue perceber o motivo

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


int contarLetra (char a, char user[200]){
	FILE *f; char str[200];
int i, contador = 0;
(strcat(user,".txt"));	// junta o nome do user com .txt para dpois abrir o file user.txt
f = fopen(user, "r");	//abre o file com o nome do user
fgets (str, 200, f);
for (i=contador=0; str[i] !='\0'; i++)
        if (str[i]==a) /*se for o caracter que procuramos*/
                 contador++;
  return contador;
}



int main(){
char user[200];
printf("introduza o nome do user\n");
scanf("%s",user); // pede o nome do user
(contarLetra('A', user));
return(1);
}

/*é uma funçao que procura um determinado char numa string. essa string vem de um file com o nome do utilizador. o main é so para testar a funçao....*/

thx

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Na main é return 0. E podes tirar os parêntesis à volta do strcat e do contarLetra (na main) porque não estão lá a fazer nada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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


int contarLetra (char a, char user[200]){
	FILE *f; char str[200];
int i, contador = 0;
strcat(user,".txt");	
f = fopen(user, "r");	
fgets (str, 200, f);
for (i=contador=0; str[i] !='\0'; i++)
        if (str[i]==a) 
                 contador++;
  return contador;
}



int main(){
char user[200];
printf("introduza o nome do user\n");
scanf("%s",user);
contarLetra('A', user);
return(0);
}

resultado: Falha de segmentção (core dumped)

:wallbash:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O problema não deve ser daí porque a mim dá direito.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Esse código está correcto. (acabei de testar)

Não te terás esquecido de colocar o ficheiro .txt na mesma pasta?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu não testei, mas a meu ver este código não está correcto. Isto é, irá dar fogo de artificio se introduzir-se uma string com mais de 200 caracteres.

Para não falar nas validações a ver se conseguiu abrir o ficheiro ou não.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, se formos por aí, então há certas coisas que precisam de uns ajustes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Para não falar nas validações a ver se conseguiu abrir o ficheiro ou não.

Eu apostava mesmo nisso.

Mas dava jeito saber em que sítio rebenta.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

hehe...

dêem desconto...é o 1º contacto com a linguagem... :biggrin:

um pouco melhorado:

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


int contarLetra (char a, char user[200]){
	FILE *f; char str[200];
int i, contador = 0;
strcat(user,".txt");	// junta o nome do user com .txt para dpois abrir o file user.txt
f = fopen(user, "r");	//abre o file com o nome do user
if (f== NULL) {
	printf("Impossivel Abrir Ficheiro!");  
	}
fgets (str, 200, f);
for (i=contador=0; str[i] !='\0'; i++)
        if (str[i]==a) 
                 contador++;
  return contador;
fclose(f);
}



int main(){
        char user[200];
        printf("introduza o nome do user\n");
        scanf("%s",user); 
printf("Quantidade de:\n");
printf("A - %d\n",(contarLetra('A', user)));
printf("G - %d\n",(contarLetra('G', user)));
printf("T - %d\n",(contarLetra('T', user)));
printf("C - %d\n",(contarLetra('C', user)));
}

o problema é que no file tenho:

AAAAAAAACCCCCCCC

a funçao retorna:

Quantidade de:

A - 8

Ficheiro Vazio

Falha de segmentção (core dumped)

esquezito  :dontgetit:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas.. n é muito esquisito... nesta linha aqui - strcat(user,".txt"); - modificaste o user para xxxx.txt , ou seja cada vez que chamas a função adicionas um .txt ao nome do  ficheiro. xxxx.txt.txt.txt.... resumindo.. na segunda vez que entras nessa função vais tentar abrir um ficheiro que não existe e dá segfault. Já agora, poe um \n no fim da mensagem, ou corres o risco de não ver a mensagem em caso de segfault - printf("Impossivel Abrir Ficheiro!\n\n\n\n\n\n\n\n");  . haztaaa

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora