Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Odwrócenie tekstu - funkcja + podstawy wskaźników.

Ostatnio zmodyfikowano 2014-09-05 10:20
Autor Wiadomość
Corso273
Temat założony przez niniejszego użytkownika
Odwrócenie tekstu - funkcja + podstawy wskaźników.
» 2014-09-05 00:16:24
Witam,
Poniżej przesyłam kod z dwóch utworzonych przeze mnie funkcji (kurs kuzniaprogramistow.pl zad 11.1) -
1)Zadaniem pierwszej funkcji jest zamiana wartości zmiennych
int swapNum(int *num1, int *num2);
2)Drugiej Odwrócenie tekstu po przez funkcje
char reverseText(char *tekst);

Pierwsza funkcja kula. Tutaj nie mam pytań.

Druga działa tak, że do tablicy statycznej przedOdwr wrzucam pokolei to co zostało przekazane przez argument *text - czyli po prostu tablice "Ala ma kota".

Następnie z tablicy statycznej od tyłu zapisuje znaki aż do napotkania '\0' do wskaźnika *text. Więc tekst jest odwrócony.

Gdy jestem wewnątrz funkcji wyświetla na ekran odwrócony tekst - wszystko jest ok
Jednak po wyjściu z funkcji i użyciu wskaźnika *pTekst(to co zostało przekazane jako argument) wywala mi błąd związany z pamięcią SIGSEV segmentation fault.

1)Czy muszę zalokować pamięć przy użyciu operatora new?
2)Czy dobrze myślę, że zmieniając wskaźnik *text działam na też *pTekst, czy coś tu trzeba dopisać żeby tak się działo?:)

C/C++
#include <iostream>
#include <string>
#include <string.h>
using namespace std;

int swapNum( int * num1, int * num2 );
char reverseText( char * text );

int main() {
   
    int x = 66, y =- 22;
   
    cout << "przed " << x << " " << y;
    swapNum( & x, & y );
    cout << "po" << x << " " << y;
   
   
    char ala[] = "Ala ma kota";
    char * pTekst = ala; //Wskazuje na 0 indeks tablicy
   
    reverseText( pTekst );
    /*Tu nie wyswietla*/
    cout <<( pTekst );
   
    return 0;
}

/*Funkcja zamieniajaca miejscami x i y*/
int swapNum( int * num1, int * num2 ) {
    int przech;
   
    przech =* num1;
    num1 = num2;
    num2 =& przech;
   
    return 0;
};

/*Funkcja odwracajaca tekst, argument wskazuje na 0 indeks tablicy - dzialamy na tym co jest pod tym adresem*/
char reverseText( char * text ) {
   
    char przedOdwr[ 100 ]; int dlugosc = 0;
   
    for( int i = 0; * text != '\0'; i++ ) {
        przedOdwr[ i ] =* text;
        text++;
        dlugosc++;
    }
    int j = 0;
    for( int i = dlugosc - 1; i >= 0; i-- ) {
        *( text + j ) = przedOdwr[ i ];
        j++;
    }
   
    /*Tutaj ok wyswietla*/
    for( int i = 0; i <= 10; i++ )
         cout << *( text + i );
   
};
P-116645
pekfos
» 2014-09-05 10:20:17
Jak określasz typy zwracane funkcji, to musisz coś zwracać. Funkcja swapNum() jest niepoprawna i nie ma sensu.

C/C++
for( int i = dlugosc - 1; i >= 0; i-- ) {
    *( text + j ) = przedOdwr[ i ];
    j++;
}
Wychodzisz poza tablicę.
P-116650
« 1 »
  Strona 1 z 1