strncpy() - dziwne znaki
Ostatnio zmodyfikowano 2017-02-05 18:56
Lich555 Temat założony przez niniejszego użytkownika |
strncpy() - dziwne znaki » 2017-02-04 22:19:18 Witam. Szczerze to nawet nie wiem, czy problem dotyczy funkcji strncpy() - tak jak to dałem w temacie - ale tak mi się wydaje. Kod programu: #include <iostream> #include <cstring>
using namespace std;
class instrum { public: void virtual wydaj_dzwiek() { cout << "cisza"; } virtual ~instrum() { cout << "Destruktor instrumentu\n"; } };
class skrzypce : public instrum { char * nazwa; public: skrzypce( const char * firma ) { nazwa = new char[ strlen( firma ) + 1 ]; strncpy( nazwa, firma, sizeof( nazwa ) ); } ~skrzypce() { cout << "Destruktor skrzypiec + "; delete nazwa; } void wydaj_dzwiek() { cout << "tirli-tirli (" << nazwa << ")\n"; } };
class gwizdek : public instrum { public: void wydaj_dzwiek() { cout << "fiu-fiu\n"; } };
class gitara : public instrum { char * nazwa; public: gitara( const char * firma ) { nazwa = new char[ strlen( firma ) + 1 ]; strncpy( nazwa, firma, sizeof( nazwa ) ); } ~gitara() { cout << "Destruktor gitary + "; delete nazwa; } void wydaj_dzwiek() { cout << "brzedk-brzdek (" << nazwa << ")\n"; } };
int main() { cout << "Definiujemy w zapasie pamieci trzy intsrumenty orkiestry\n" << endl; instrum * pierwszy = new skrzypce( "Stradivarius" ); instrum * drugi = new gitara( "Ramirez" ); instrum * trzeci = new gwizdek; cout << "Gramy polimorficznie!\n"; pierwszy->wydaj_dzwiek(); drugi->wydaj_dzwiek(); trzeci->wydaj_dzwiek(); cout << "\nKoncert sie skonczyl, likwidujemy instrumenty\n\n"; delete pierwszy; cout << "****************************\n"; delete drugi; cout << "****************************\n"; delete trzeci; return 0; }
Wiem, że nie powinienem wrzucać rezultatów programu w postaci screenów, ale proszę o wybaczenie, gdyż po prostu nie wiem co to są za znaki :D http://i.imgur.com/I7WfGdl.pngWidać je w miejscu, gdzie powinny pojawić się nazwy instrumentów. |
|
mateczek |
» 2017-02-04 22:26:13 nie podawaj rozmiaru przy wywoływaniu strcopy. Ta funkcja sama wie ile ma skopiować !!! i jeszcze jedna uwaga!!! Tablice kasujemy tak cout << "Destruktor skrzypiec + "; delete[] nazwa; |
|
Lich555 Temat założony przez niniejszego użytkownika |
» 2017-02-05 10:00:45 Ja używam nie strcpy, ale strncpy. Z tego co wiem w tej funkcji trzeba podać rozmiar. |
|
mateczek |
» 2017-02-05 10:24:01 Ja używam nie strcpy, ale strncpy. Z tego co wiem w tej funkcji trzeba podać rozmiar. |
Myślałem, że w wyniku pomyłki lub literówki. Ale jak masz jakiś szczególny powód by używać właśnie tej funkcji to w takim razie podaj rozmiar tekstu nie rozmiar wskaźników. skrzypce( const char * firma ) { int rozmiar = strlen( firma ) + 1; nazwa = new char[ rozmiar ]; strncpy( nazwa, firma, rozmiar ); } kod testowy #include <iostream> #include <cstring>
using namespace std;
int main() { char * wsk1 = new char[ 20 ]; char * wsk2 = new char[ 100 ]; if( sizeof( wsk1 ) == sizeof( wsk2 ) ) { cout << "wskaźniki mają taki sam rozmiar"; } }
|
|
Lich555 Temat założony przez niniejszego użytkownika |
» 2017-02-05 18:56:23 Ok, działa. Wielkie dzięki za odpowiedź :) |
|
« 1 » |