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 |