Program kopiujący C-string z tablicy do innej tablicy.
Ostatnio zmodyfikowano 2016-09-25 22:58
mateczek |
» 2016-09-25 20:31:04 Dostałeś już poprawne odpowiedzi więc sorki że trochę przejaskrawię char * napis = "aaaaaaaaaaaaaa"; char * wsk; * wsk = * napis; * napis = 'b';
a tak jest dobrze #include <iostream> using namespace std;
int main() { char * napis = "ala ma kota"; char * wsk1 = new char[ 20 ]; for( int i = 0; napis[ i ]; i++ ) { wsk1[ i ] = napis[ i ]; } cout << wsk1 << endl; cout << napis << endl; }
|
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-09-25 20:44:37 ok, rozumiem, tylko w takim razie dlaczego poprawne jest takie wyrażenie while(( *( wsk++ ) = *( wsk2++ ) ) )
Ten przykład wziąłem z książki. tam było to(ta pętla) zawarte w funkcji, kopiującej znaki z 1 C-Stringa do drugiego, przyjmującej argumenty const char* zrodlo i char * cel. Przy czym argumentami aktualnymi, które zostały przesłane przy wywołaniu funkcji były tablice: int skad[]{"tu jest string"}; int dokad[80]; czyli: kopiuj(skad, dokad); Nie wiem czy to, że przesyłanymi argumentami były tablice a nie wskaźniki na tablice ma jakieś znaczenie? |
|
mateczek |
» 2016-09-25 20:49:13 while( (*(wsk++)= *(wsk2++)) )
|
w twoim programie z góry wątku nie możesz tak robić !! 1aam2am1 wysłał Ci prawidłowy kod. W książce też jest prawidłowy. Ale twój nie AD2 tablica i wskaźnik to jest to samo! Nigdzie nie masz wskaźników na tablice. masz wskaźniki na element tablicy !! #include <iostream> using namespace std; int main() { char * napis = "ala ma kota"; cout <<*( napis + 1 ) << " to jest to samo!!! " << napis[ 1 ] << endl; }
|
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-09-25 21:08:16 Podsumowując, mając taką funkcję przepisująca, muszę przesyłać jako argumenty tablice? |
|
pekfos |
» 2016-09-25 21:10:00 Na pewno nie wskaźniki bez pokrycia. |
|
mateczek |
» 2016-09-25 21:12:05 podsumowując to musisz zalokować pamięć! co miałeś napisane już w pierwszej odpowiedzi.(choć może nie wprost) |
|
Monika90 |
» 2016-09-25 21:14:17 tablica i wskaźnik to jest to samo!
|
No właśnie nie.
char * napis = "ala ma kota";
|
To się nie skompiluje w C++. Kiedyś było to dopuszczalne dla kompatybilności z bardzo stary kodem. Ale teraz to jest błąd. W kompilatorze GCC można użyć opcji -Werror=write-strings i ten błędny kod przestanie się kompilować. Musi tam być const const char * napis = "ala ma kota";
|
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-09-25 21:30:08 char * napis = "ala ma kota"; Code blocks pozwala :D Dzięki, już zrozumiałem. Wcześniej myślałem, że taki niezdefiniowany wskaźnik char*wsk wskazuje sobie na jakąś pustą tablicę w pamięcy (tzn. na jej pierwszy element). I jeszcze na koniec, powiedzcie mi tylko, czy dobrze już wszystko rozumiem ;) #include <iostream> using namespace std; int main() { const char * wsk = "ala ma kota"; cout << wsk << endl; char tab[] { "ala ma kota" }; cout << tab << endl; wsk = tab; cout << wsk << endl; }
|
|
1 « 2 » 3 |