Odwrócenie tekstu - funkcja + podstawy wskaźników.
Ostatnio zmodyfikowano 2014-09-05 10:20
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?:) #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; reverseText( pTekst ); cout <<( pTekst ); return 0; }
int swapNum( int * num1, int * num2 ) { int przech; przech =* num1; num1 = num2; num2 =& przech; return 0; };
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++; } for( int i = 0; i <= 10; i++ ) cout << *( text + i ); }; |
|
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. for( int i = dlugosc - 1; i >= 0; i-- ) { *( text + j ) = przedOdwr[ i ]; j++; }
|
Wychodzisz poza tablicę. |
|
« 1 » |