Forum » Programiranje » strcpy reče segmatation fault
strcpy reče segmatation fault
MasterMind ::
V redu, problem se nahaja v tej funkciji.
(Upam, da nisem preveč zapounu posta )
Ko vnašam "dijake", mi 1. vpiše brez napak, ko grem pa dodat še enega, mi pa štekne pri vpisovanju poštne številke drugega dijaka. In ko sem šel delat debug, mi je pri vrstici strcpy(dijaki[st-1].naslov_dijaka.postna_stevilka,temp); javi segmatation fault. Bi mogoče vedeli kje bi lahko bila napaka?
Hvala vnaprej...
void vpis() { do { st++; dijaki=(struct oseba*) realloc(dijaki, st * sizeof(struct oseba)); system("clear"); printf("Vpišite ime dijaka: "); gets(temp); temp2=strlen(temp); dijaki[st-1].ime=(char*) malloc(temp2 * sizeof(char)); strcpy(dijaki[st-1].ime,temp); printf("Vpišite priimek dijaka: "); gets(temp); temp2=strlen(temp); dijaki[st-1].priimek=(char*) malloc(temp2 * sizeof(char)); strcpy(dijaki[st-1].priimek,temp); printf("Vpišite hišno številko dijaka: "); gets(temp); temp2=strlen(temp); dijaki[st-1].naslov_dijaka.hisna_stevilka=(char*) malloc(temp2 * sizeof(char)); strcpy(dijaki[st-1].naslov_dijaka.hisna_stevilka,temp); printf("Vpišite poštno številko dijaka: "); gets(temp); temp2=strlen(temp); dijaki[st-1].naslov_dijaka.postna_stevilka=(char*) malloc(temp2 * sizeof(char)); strcpy(dijaki[st-1].naslov_dijaka.postna_stevilka,temp); printf("\nImate še kakšnega dijaka za vpisati?(D/N) "); temp[0]=getchar(); getchar(); if((temp[0]=='d') || (temp[0]=='D')) { izbira=1; } else { izbira=0; } }while(izbira==1); shrani2=0; }
(Upam, da nisem preveč zapounu posta )
Ko vnašam "dijake", mi 1. vpiše brez napak, ko grem pa dodat še enega, mi pa štekne pri vpisovanju poštne številke drugega dijaka. In ko sem šel delat debug, mi je pri vrstici strcpy(dijaki[st-1].naslov_dijaka.postna_stevilka,temp); javi segmatation fault. Bi mogoče vedeli kje bi lahko bila napaka?
Hvala vnaprej...
Gentoo, KDE uporabnik.
- spremenilo: CCfly ()
CCfly ::
#include <string.h> char *strcpy(char *dest, const char *src); char *strncpy(char *dest, const char *src, size_t n);
Začni uporabljati strncpy, ker si očitno nekje prekopiral predolg niz.
Lahko bi prilepil definicjo struct oseba.
"My goodness, we forgot generics!" -- Danny Kalev
MasterMind ::
Hmm... Niz ni predolg, ker so si glede dolžine približno enaki.
Če hočš strukturo še drugih ti dam še druga dva... (+1 )
struct oseba { char *ime; char *priimek; struct naslov naslov_dijaka; struct ocene ocene_dijaka; }*dijaki;
Če hočš strukturo še drugih ti dam še druga dva... (+1 )
Gentoo, KDE uporabnik.
Zgodovina sprememb…
- spremenilo: CCfly ()
Zvedavec ::
Po moje kopiraš na kazalec, ki ti kaže nekam v prazno, namesto da bi imel narejeno tabelo tipa char. Če pa hočeš imeti v strukturi kazalce, boš moral pa dodati kakšen malloc.
MasterMind ::
Mal poglej.. Jaz imam malloc kulker hočeš . Sem poskusil z strncpy() funkcijo in je delal. Ampak je ratal drug problem. Če je string krajši od najdalšega stringa, vpiše notr tut tisto grdobijo. temp spremenljivka je polje 100 znakov tipa char (char temp[100]) in mislim, da moram to počistit... Kako se to počisti? Tako, da nardim strcpy(temp," ");? al pa strcpy(temp,NULL);. Bom kar oba načina poskusil
POPRAVEK: Noben ne dela, in sem ugotovil zakaj ne dela. Problem je v spremenljivki temp, ker se enkrat zafila do konca. (je toliko stringov, da preseže 100 znakov). Treba je samo ugotovit, kako naj to sprostim, če ne bo šlo, bom kar uporabil pointer in bo
POPRAVEK: Noben ne dela, in sem ugotovil zakaj ne dela. Problem je v spremenljivki temp, ker se enkrat zafila do konca. (je toliko stringov, da preseže 100 znakov). Treba je samo ugotovit, kako naj to sprostim, če ne bo šlo, bom kar uporabil pointer in bo
Gentoo, KDE uporabnik.
Zgodovina sprememb…
- spremenil: MasterMind ()
CCfly ::
Na koliko si nastavil st na začetku ?
- uporabljaj funkcijo calloc namesto malloc
- ko definiraš podatkovne strukture uporabi typedef
- tvoja definicija strukture in tistega kazalca dijaki sta mi malo sumljiva.
- poglej si podatkovno strukturo linearni seznam
Za začetek nekako takole (ampak resno si poglej linearni seznam).
- uporabljaj funkcijo calloc namesto malloc
- ko definiraš podatkovne strukture uporabi typedef
- tvoja definicija strukture in tistega kazalca dijaki sta mi malo sumljiva.
- poglej si podatkovno strukturo linearni seznam
typedef struct strOseba { char *ime; char *priimek; struct naslov naslov_dijaka; struct ocene ocene_dijaka; } oseba; .... oseba **dijaki;
Za začetek nekako takole (ampak resno si poglej linearni seznam).
"My goodness, we forgot generics!" -- Danny Kalev
Zgodovina sprememb…
- spremenilo: CCfly ()
Gundolf ::
To ti je kazen, ker ne uporabljaš C++
No resno, če se ti temp zafila pa jo nastavi na večjo številko, npr 1000000 (saj menda ti ne primankuje RAMa? )
No resno, če se ti temp zafila pa jo nastavi na večjo številko, npr 1000000 (saj menda ti ne primankuje RAMa? )
MasterMind ::
Hvala CCfly. Sem naredil kakor si ti rekel, in je delalo. Najprej sem pa mogel še strcpy zamenat s strncpy . (pri pouku smo glih vzeli strukture, pa sem šel malo programirat s strukturam ).
Gentoo, KDE uporabnik.
MasterMind ::
V šoli se učimo C. Zato pišem v C-ju. In sploh ni problem v temp-u . (nasledn let bom pa pisal v C++ )
Aja. KAkšna je sploh bistvena razlika med calloc in malloc? Razen te, da ga malo drugače kličeš
Aja. KAkšna je sploh bistvena razlika med calloc in malloc? Razen te, da ga malo drugače kličeš
Gentoo, KDE uporabnik.
Zgodovina sprememb…
- spremenil: MasterMind ()
Gundolf ::
Aja. KAkšna je sploh bistvena razlika med calloc in malloc? Razen te, da ga malo drugače kličeš?
Si že sam ugotovil vso razliko.
MasterMind ::
Približno sem . Zaenkrat ni bistvenih teških problemov. Ko bom padel na kakšnega, bom kar v to temo napisal... Hvala za pomoč...
Gentoo, KDE uporabnik.
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [C] strukture, kazalci in točen datum/časOddelek: Programiranje | 696 (564) | aceton |
» | [C] struct in int[] (strani: 1 2 )Oddelek: Programiranje | 7318 (6391) | MrBrdo |
» | C strukture, kazalci naloga pomocOddelek: Programiranje | 1461 (1356) | DavidJ |
» | [C] problem s kazalciOddelek: Programiranje | 1333 (1094) | BigWhale |
» | [C] Narascajoce sortiranje linearnega seznamaOddelek: Programiranje | 1856 (1745) | Jebiveter |