Wskaźniki do tablic znaków- zadanie
Ostatnio zmodyfikowano 2013-06-30 15:08
Matix8741 Temat założony przez niniejszego użytkownika |
Wskaźniki do tablic znaków- zadanie » 2013-06-26 15:38:43 Czytam "Symfonie c++" i utknąłem na zadaniu ze wskaźników mianowicie: Napisz funkcje, która wywoływana jest z dwoma argumentami. Pierwszy to wskaźnik do tablicy znaków, w której jest już jakiś C-string. Drugi to rozmiar tej tablicy. Funkcja ta ma do początku bieżącej treści tablicy znaków dopisać tekst "UWAGA:". Jeśli w rezultacie powstałby C-string dłuższy, niż na to pozwala obecny rozmiar tablicy znaków - niech trzy ostatnie możliwe znaki zostaną zastąpione trzema kropkami. Jako rezultat swej pracy funkcja ta ma zwracać wskaźnik do tablicy znaków, na której dokonała zmiany. Wykombinowałem taki kod: #include <iostream> using namespace std; char * uwaga( char *, int ); int main() { const int rozmiar = 55; char tekst[ rozmiar ] = { " za 3 sek nastąpi autodestrukcja" }, * wsk = tekst; uwaga( wsk, rozmiar ); cout <<* wsk; return 0; } char * uwaga( char * zmieniacz, int ile ) { char * przechowywacz = new char[ ile ], uwaga[] = { "UWAGA:" }; int g = 0; while( * zmieniacz != 0 ) { *( przechowywacz++ ) =*( zmieniacz++ ); g++; } zmieniacz -= g + 1; int i = 0; for(; i < 6; i++, zmieniacz++ ) { * zmieniacz = uwaga[ i ]; } while( * zmieniacz != 0 ) { zmieniacz++; i++; } int czy = 0; while( i < ile ) { if( * zmieniacz == 0 ) czy++; } zmieniacz -= ile + 7; while( * przechowywacz != 0 ) { *( zmieniacz++ ) =*( przechowywacz++ ); } if( czy >= 6 ) { zmieniacz -= 3; for( int i = 0; i < 3; zmieniacz++, i++ ) * zmieniacz = '.'; } zmieniacz -= ile + 1; return zmieniacz; }
Co jest nie tak? Bo w programie nic się nie pokazuje (tak jakby jakaś pętla się nie kończyła), a kompilator nie wyświetla żadnych błędów. |
|
pekfos |
» 2013-06-26 18:29:57 while( i < ile ) { if( * zmieniacz == 0 ) czy++; } Jeśli i < ile jest prawdziwe, to program się tu zatrzyma. |
|
Matix8741 Temat założony przez niniejszego użytkownika |
» 2013-06-26 19:48:29 Masz rację, ale nadal program nie działa. Zauważyłem, że wskaźnik char * wsk nie wskazuje na tablice znaków tekst |
|
abdi |
» 2013-06-26 21:30:14 musisz przypisać do siebie wskaźniki wsk = tekst |
|
Matix8741 Temat założony przez niniejszego użytkownika |
» 2013-06-26 21:31:56 tak nie wystarczy ? char tekst[ rozmiar ] = { " za 3 sek nastąpi autodestrukcja" }, * wsk = tekst |
|
abdi |
» 2013-06-26 21:42:41 ciągi znaków są wyjątkowym tworem które możesz sobie zadeklarować w taki sposób. char * wsk = "abcd"; w przypadku innego typu np int taka instrukcja w ogóle by się nie skompilowała. int * wsk2 = 2; i ty właśnie sobie deklarujesz nowy wskaźnik na jakiś tam tekst, ale on znajduje się w całkiem odrębnym miejscu w pamięci. jeśli chcesz aby wskaźnik wskazywał na to samo miejsce to musisz użyć: wsk = tekst Mam nadzieję że trochę rozjaśniłem. |
|
pekfos |
» 2013-06-26 21:46:51 char * wsk = "abcd"; w przypadku innego typu np int taka instrukcja w ogóle by się nie skompilowała. |
Za to tu będzie warning, albo nawet błąd, bo c-string jest typu const char*. A z tym * wsk = tekst chodziło o char * wsk = tekst , a nie o przypisanie wskaźnika do znaku. |
|
Matix8741 Temat założony przez niniejszego użytkownika |
» 2013-06-26 23:07:59 A ja nadal nie wiem gdzie mam błąd ;( |
|
« 1 » 2 3 |