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

Reply via email to