zainicjowany int wywala program
Ostatnio zmodyfikowano 2019-09-15 11:22
Maaar Temat założony przez niniejszego użytkownika |
zainicjowany int wywala program » 2019-09-15 09:05:48 Witam! #include <stdio.h>
int main() { char * myfname = "Jan Maria"; char mysname[] = "Kowalski"; char * tabnames; int wiek = 30; sprintf( tabnames, "%s %s", myfname, mysname ); printf( "%s\n", tabnames ); return 0; }
Po udanej kompilacji, kiedy chcę uruchomic program, system zgłasza: Naruszenie ochrony pamięci Ale kiedy komentuje w kodzie //int wiek = 30; Program normalnie sie wykonuje: Jan Maria Kowalski Pomocy bo nie rozumiem dlaczego zmienna int wiek nie może być zainicjowana :/ |
|
jankowalski25 |
» 2019-09-15 10:26:13 Przede wszystkim kod wstawiaj w [cpp]kod[/cpp]. char * myfname = "Jan Maria"; |
Użyj const char * myfname lub char myfname[] , bo inaczej masz wskaźnik zawierający adres stałego łańcucha znakowego i jak zechcesz go użyć do edycji tego napisu, to się program może sypnąć. Linijkę niżej używasz wersji tablicowej, więc dlaczego tutaj robisz to inaczej? Funkcja sprintf() oczekuje jako argumentu czegoś, co będzie wystarczająco pojemne, aby zmieścić cały napis. Na razie masz niezainicjalizowany wskaźnik, więc zapisujesz dane gdzieśtam w pamięci, co może wysypać program. |
|
Maaar Temat założony przez niniejszego użytkownika |
» 2019-09-15 11:22:34 Zmieniłem *tabnames na tabnames[80] i działa bez problemu.
Dziękuję!!! |
|
« 1 » |