Ir ao conteúdo

[PROBLEMA]Segmentation Fault


Mobios

Posts recomendados

Postado

Ola a todos, sou um estudando de eng. eletrica na UEM e o meu professor de Fund. da Programaçao pediu uma listinha basica de exericicios, mas estou com um pequeno problema no programa.

Meu interesse aqui é saber como posso consertar um problema no meu programa, que quando saio do loop inserindo a palavra "fim" o programa retorna a palavra "Segmentation Fault".

Alguem sabe o que pode estar causando isso? o que devo proceder pra arrumar essa ***

Ai vai o codigo

#include<stdio.h>
#include<malloc.h>
char* substr(char*, int, int);
/*C Funçao subString */

char *substr(char *string, int position, int length)
{
char *pointer;
int c;

pointer = malloc(length+1);

if (pointer == NULL)
{
printf("Unable to allocate memory.\n");
}

for (c = 0 ; c < position -1 ; c++)
string++;

for (c = 0 ; c < length ; c++)
{
*(pointer+c) = *string;
string++;
}

*(pointer+c) = '\0';

return pointer;
}

int main()
{
//VARIAVEIS
char frase[150][151], pal;
int tam, cont, ini, i;

//INICIO
cont = 0;
printf("\n Parar a repetiçao -> insira 'fim' quando solicitar frase");
while (strcmp(frase[cont], "fim") != 0)
{
cont++;
printf("\n Insira uma frase -> ");
scanf("%[A-Z a-z]", &frase[cont]);
__fpurge(stdin);
}
while (cont > 0)
{
cont--;
tam = strlen(frase[cont]);
while (strcmp(substr(frase[cont], tam, 1), ' ') == 0)
{
tam--;
}
tam = tam + 1;
ini = 0;
i = 0;
if (strcmp(frase[ini], ' ') != 0)
{
i = i + 1;
}
else if (i > 6)
{
pal = substr(frase[cont], ini - i, i);
printf("\n\t %s", pal);
}
}
}

Postado

A sua lógica está correta. Ocorreram apenas alguns errinhos, apenas na função "main()".

Ajustei seu código e adicionei comentários para informar os pontos com problema.

Segue:


int main(void)
{
char frase[150][151], *pal;
int tam, cont, ini, i;

cont = 0;
printf("\n Parar a repetiçao -> insira 'fim' quando solicitar frase");

/*
Precisa pegar uma posição anterior para efetuar a comparação, se não, será a posição ativa.
Não pode incrementar antes o 'cont', porque perderá a inserção na posição 0 (zero)
*/
while (strcmp(frase[cont-1], "fim") != 0)
{
printf("\n Insira uma frase -> ");
scanf(" %[A-Z a-z]s", frase[cont]); // O espaço antes do '%' serve para retirar o lixo armazenado no buffer stdin.
cont++;
}
while (cont > 0)
{
cont--;
tam = strlen(frase[cont]);

while( frase[cont][strlen(frase[cont]-1)] == ' ') // Simplificação do posição de comparação
tam--;

tam = tam + 1;
ini = 0;
i = 0;

if (strcmp(frase[ini], " ") != 0) // Deve-se usar "" pois ele trata como string. O '' é usado para caracter simples.
{
i = i + 1;
}
else if (i > 6)
{
pal = substr(frase[cont], ini - i, i);
printf("\n\t %s", pal);
}
}

return 0; // Deve sempre informar o valor a ser retornado no término do programa. O valor 0 (zero) informa ao S.O. que o término ocorreu sem erros.
}

Espero que ajude!

  • 2 semanas depois...
  • Moderador
Postado

Caso o autor do tópico necessite, o mesmo será reaberto, para isso deverá entrar em contato com a moderação solicitando o desbloqueio.

Arquivado

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

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!