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

QuickFire

[Resolvido] Segmentation Fault

10 mensagens neste tópico

Boas :) tou aqui desesperado com isto :| peguei estas férias de novo no livro do Damas e na parte das strings ele diz uma função para comparar, eu escrevo a função mas quando vou a executar no windows, dá-me um erro de memória chato :shocking: a dizer mal do windows como nunca disse na vida fui até ao Ubuntu e meti-me a programar lá mas... puff dá erro na mesma mas agora já sei o que se trata :D este é o output:

EXECUTING:
/home/pedro/C/prog0706
----------------------------------------------
Nome: Pedro

----------------------------------------------
Program has been terminated receiving signal 11 (Segmentation fault)
Press the Enter key to close this terminal ...

O código é este:

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

int strcmp(char *s1, char *s2) {
    int i;
    while (s1[i]==s2[i] && s1[i]!='\0') { i++; }
    return ((unsigned char) s1[i] - (unsigned char) s2[i]);
    }

main() {
       char nome[21];
       printf("Nome: "); scanf("%s", nome);
       printf("\n%d", strcmp(nome,"teste"));
       system("PAUSE");
}

Alguém sabe o que pode tar a acontecer ? Thanks :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas :) tou aqui desesperado com isto :| peguei estas férias de novo no livro do Damas e na parte das strings ele diz uma função para comparar, eu escrevo a função mas quando vou a executar no windows, dá-me um erro de memória chato :shocking: a dizer mal do windows como nunca disse na vida fui até ao Ubuntu e meti-me a programar lá mas... puff dá erro na mesma mas agora já sei o que se trata :D este é o output:

EXECUTING:
/home/pedro/C/prog0706
----------------------------------------------
Nome: Pedro

----------------------------------------------
Program has been terminated receiving signal 11 (Segmentation fault)
Press the Enter key to close this terminal ...

O código é este:

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

int strcmp(char *s1, char *s2) {
    int i;
    while (s1[i]==s2[i] && s1[i]!='\0') { i++; }
    return ((unsigned char) s1[i] - (unsigned char) s2[i]);
    }

main() {
       char nome[21];
       printf("Nome: "); scanf("%s", nome);
       printf("\n%d", strcmp(nome,"teste"));
       system("PAUSE");
}

Alguém sabe o que pode tar a acontecer ? Thanks :D

a tua funcao nao esta a devolver um inteiro...  return ((unsigned char) s1 - (unsigned char) s2);

tv seja ai o erro..nao ??

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

pegaste estas férias e já vais nas strings? wtf ? eu vou nas funções e já o estou a ler ah uns 4 meses

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Lol, em c++ não é preciso 'constuir' a função strcmp...ela já vem feita...é só usar....

old school c users... :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas

Deves precisar de inserir um '\0' na string nome.

Em C todas as strings têm de acabar com o caracter '\0', senão começas a tentar aceder a posições de memória que não são tuas e aí aparece o tradicional "seg fault"  :D

Abraços!!  :)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

erro primário, nao estas a iniciar a variavel i a zero.

segmentation fault quer dizer que tentaste aceder a uma posiçao de memoria invalida.

o que se passa é que o compilador dá um numero arbitrario à variavel i, quando fazes nome o normal é que i seja muito maior que o tamanho da tua string e como tal acede a uma posiçao de memoria que nao esta reservada e dá o erro.

@tufas: o compilador retorna o codigo ascii do char que ele retorna.

@Gurzi: Li o Damas em 2 dias.

@vbmaster: em c é igual, mas como ele nao adicionou o string.h teve que criar a funçao...ajuda a treinar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Xeh jarsantos thanks :P era facil mesmo :P tou tão habituado ao for que esqueci esse pormenor :) thanks pela explicação foi muito clara :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

leste o damas em 2 dias? deves ter feito todos os exercicios e tomado atenção a tudo :P

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obvio que nao fiz os exercicios, mas serve para apanhar as bases e depois ir praticando e saber onde procurar no livro as duvidas que surgirem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

@tufas: o compilador retorna o codigo ascii do char que ele retorna.

tofas...sff  :biggrin: :P

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