latajacaryba Temat założony przez niniejszego użytkownika |
Program kopiujący C-string z tablicy do innej tablicy. » 2016-09-25 18:16:25 Witam. Program ma robić to co w temacie. Nie wiem co tu jest źle, program wywala błąd po włączeniu (włączeniu, nie przy kompilacji!) #include <iostream> using namespace std; char * przepisz( const char * tekst, char * cel );
int main() { const char * tekst = "Tutaj jest tekst i bedzie przepisywany"; char * cel; cout << przepisz( tekst, cel ); } char * przepisz( const char * tekst, char * cel ) { char * wynik = cel; while(( *( cel++ ) = *( tekst++ ) ) ); return wynik; }
|
|
pekfos |
» 2016-09-25 18:30:05 wywala błąd po włączeniu (włączeniu, nie przy kompilacji!) |
Takie to dziwne..? Ile masz tam miejsca, tak z ciekawości? |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-09-25 18:34:20 "wywala błąd po włączeniu (włączeniu, nie przy kompilacji!) Takie to dziwne..?" chodziło mi o to, żeby zaznaczyć, że to nie błąd np. brak średnika itd. "char * cel; Ile masz tam miejsca, tak z ciekawości?" to znaczy? Wszystko jest w kodzie, tablica na którą wskazuje cel nie była definiowana, nic tam nie wstawiałem. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-09-25 19:03:03 Już chyba wiem co było źle. Nie można robić tak: char * wsk="abc"; char * wsk2="def"; *wsk=*wsk2; tylko właściwie czemu nie? PS. ale można tak: while((*(cel++) = *(tekst++))); Nie rozumiem tego. |
|
1aam2am1 |
» 2016-09-25 19:26:32 latajacaryba char* to wskaźnik na miejsce położenia pierwszej litery, więc *wsk=*wsk2 powoduję że tylko pierwsza litera się przepisze, nie całość. Natomiast: while((*(cel++) = *(tekst++))); powoduje przepisanie wszystkich liter dopóki wartość *tekst nie wyniesie wartości zerowej czyli aż do końca stringa.
Ps. cel powinien wskazywać na za alokowaną pamięć o wystarczającej długości. |
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-09-25 19:33:16 1aam2am1 Ale kiedy napisze się tak: char * wks="abc"; char * wsk2="def"; *wsk=*wsk2; to błąd krytyczny. |
|
1aam2am1 |
» 2016-09-25 19:49:29 Powinien wyświetlić ci się przy kompilowaniu błąd gdyż "abc" jest typu const char* czyli niewolno zmieniać zawartości. wsk nie wskazuje na pamięć którą można zmieniać. Wskazuje na pamięć stałą. Należało by zrobić tak: const char * wsk2 = "bcd";
char * cel; cel =( char * ) malloc( strlen( wsk2 ) );
{ char * cel2 = cel; const char * wsk3 = wsk2; while( *( cel2++ ) = *( wsk3++ ) ); }
printf( "%s", cel );
free( cel );
|
|
latajacaryba Temat założony przez niniejszego użytkownika |
» 2016-09-25 20:02:10 no właśnie nie bardzo. Napisałem char BEZ const, więc nie jest stały. |
|
« 1 » 2 3 |