[SOLVED] segmentation fault w c++ z gnu compiler

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
kolrek
Piegowaty Guziec
Piegowaty Guziec
Posty: 3
Rejestracja: 10 lip 2008, 11:27
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

[SOLVED] segmentation fault w c++ z gnu compiler

Post autor: kolrek »

Robie program który porównuje dwa ciągi znaków i ustawia je alfabetycznie ale jak mi się wydaje że jest już dobrze to wywala mi segmentation fault. Nie zwracajcie uwagi na komentarze:grin:

Kod: Zaznacz cały

#include <iostream>
#include <stdio.h>
using namespace std;
char *text()
{
 static char *str; //deklaruje napis
 cin>>str;
 return str;
}

char *wskaznik (char tr){
    char *xtr;
    xtr=&tr;
    return xtr;

}

int strcmp (char *xtr, char *ytr){
    if(*xtr==*ytr)
        if(*xtr=='\0')
            return 0;
        else
            return strcmp(xtr+1, ytr+1);
    else
        return *xtr - *ytr;
}


int main()
{
    char *str1, *str2, *str3, *str4;
    str1=str3=text();
    str2=str4=text();
    str1=wskaznik(*str1);
    str1=wskaznik(*str2);
    /*
    cin>>str1;
    printf("oto %s\n",str1);
    cin>>str2;
    printf("oto %s\n", str2);*/
    //str1=&stri1[1];
    //str2=&stri2[1];
    if(strcmp(str1,str2)==0)
        cout<< "The words are the same"<<endl;
    else
    if(strcmp(str1,str2)<0)
        cout<<str3<<" is greater than "<<str4<<endl;
    else
        cout<<str4<<" is greater than "<<str3<<endl;
        //cout<<"mirek"<<endl;*/
    //else
    //cout<<"mireo"<<endl;
    cout << "Hello world!" << endl;
    return 0;
}
Awatar użytkownika
dawwin
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 202
Rejestracja: 18 kwie 2009, 09:16
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: problem z c++

Post autor: dawwin »

Nie mam pojęcia, po co stworzyłeś własną funkcję strcmp() skoro taka już istnieje w nagłówku

Kod: Zaznacz cały

#include <cstring>
Poza tym w C++ o wiele wygodniej używać klasy string. Prosty przykład

Kod: Zaznacz cały

string a;
string b;
a = "abc";
b = "def";

if (a.compare(b) == 0) {
   cout << "a i b sa takie same" << endl;
} else {
   cout << "a i b sa inne" << endl;
}
Moje programy - http://dawwin.users.sourceforge.net/
Nie pomagam na PW
Awatar użytkownika
kolrek
Piegowaty Guziec
Piegowaty Guziec
Posty: 3
Rejestracja: 10 lip 2008, 11:27
Płeć: Mężczyzna
Wersja Ubuntu: 10.10
Środowisko graficzne: GNOME
Architektura: x86

Odp: segmentation fault w c++ z gnu compiler

Post autor: kolrek »

oto chodzi że miałem stworzyć własna taką funkcje i to o typie char, i jak teraz zmienie na string to będą w skakiwały błędy z konwersją na char w funkcji strcmp
Awatar użytkownika
dawwin
Serdeczny Borsuk
Serdeczny Borsuk
Posty: 202
Rejestracja: 18 kwie 2009, 09:16
Płeć: Mężczyzna
Wersja Ubuntu: 11.04
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

Odp: segmentation fault w c++ z gnu compiler

Post autor: dawwin »

To nazwij ją chociaż inaczej.
I nie potrzeba Ci wywołań rekurencyjnych (czyli wywoływania strcmp() w strcmp()). Wystarczy jedna pętla while.

Kod: Zaznacz cały

int my_strcmp(const char *a, const char *b)
{
    while (*a != '\0' && *b != '\0') {
        if (*a != *b) {
            return ((*a)-(*b));
        }

        a++;
        b++;
    }

    if (*a == *b) {
        return 0;
    } else {
        return ((*a)-(*b));
    }
}
I jeszcze jedna uwaga - nie używamy w c++ printf() i scanf()
Moje programy - http://dawwin.users.sourceforge.net/
Nie pomagam na PW
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 5 gości