On Sun, Jan 09, 2000 at 04:39:23PM +0100, Iztok Pizorn wrote:
> pozdravljeni!
>
> spet imam eno lame vprasanje (libc sem prebral, ampak ni noter...);
> rad bi, da mi kdo poda s simple primerom, kako naj uporabim to, kar vrne
> funkcija char **funkcija();
> char** funkcija() {
> char *enota[3];
> char **k_enota = enota;
> char niz1[] = "niz1", niz2[]="niz2";
> enota[0] = &niz1[0];
> enota[1] = &niz2[0];
> enota[2] = NULL;
> return (k_enota);
> }
>
> torej, ne vem niti, ce sem funkcijo prav napisal...
> potem bi pa rad uporabil v drugi funkciji:
>
> void funkcija2(){
> char **besede;
> besede = funkcija();
> }
>
> in bi potem lahko crpal npr.
> char enniz[10];
> strcpy(enniz, besede[1]); //besede[1] = "niz2"!
>
> itd.
> vse kar naredim, mi program vrne segmentation fault/core dumped...
Debugiraj. Videl bos, da nekje dobis pointer (najbrz null),
ki je malce zgresen.
Zdaj pa napake:
char *enota[x]; je v redu deklaracija.
To je spremenljivka, ki drzi pointer na tabelo pointerjev na stringe dolge 3
bajte. (char **tabela; je isto kot char *tabela[];) V to spremenljivko
ti spravljas naslov prvega znaka v nizu, kar je cisto v redu.
Zdaj, ko si to pospravil, moras sele priredit **k_enota spremenljivki
vrednost pointerja enota.
k_enota = enota;
Zdaj k_enota kaze na prvi niz (niz1), ki mu sledi drugi, in potem null.
In ne sme vec javljat segfaulta.
Jure