Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

zainicjowany int wywala program

Ostatnio zmodyfikowano 2019-09-15 11:22
Autor Wiadomość
Maaar
Temat założony przez niniejszego użytkownika
zainicjowany int wywala program
» 2019-09-15 09:05:48
Witam!
C/C++
#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 :/
P-175205
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?

char * tabnames;
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.
P-175206
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ę!!!
P-175207
« 1 »
  Strona 1 z 1