Avatar
emedla
Člen
Avatar
emedla:16.4.2015 20:59

Je mi to trochu trapný, ale nevím, jak vrátit pole z funkce.
Zdá se mi, že jsem někde četl, že u polí je jakási vyjímka. Možná si to ale pletu s tím, že pole funguje jako pointer. No mám v tom trochu zmatek. Ta funkce mi funguje, ale potřebuju to mít v nějaké proměnné v mainu.

void itos (char cislo)
{
    int i;
    int n=cislo;
    int delka=0;
    int pomocne=0;


    while(cislo!=0) // = nebo ==
    {
        cislo =cislo/10;
        delka++;
        printf("%d\n", delka);
    }
    printf("delka je: %d\n", delka);
    char s[delka+1];
    cislo=n;

    for(i=0; i < delka ; i++)
    {

        pomocne=cislo%10;
        //printf("%d\n",pomocne);
        s[i]=pomocne+'0';
        cislo = cislo/10;
        printf("%c\n",s[i]);
    }

    s[i]='\0';

    reverse(s);
    printf("%s\n", s);

}
 
Odpovědět 16.4.2015 20:59
Avatar
tomisoka
Redaktor
Avatar
Odpovídá na emedla
tomisoka:16.4.2015 21:45

Pokud chceš vracet pole tak musí být dynamicky alokované ( pak můžeš vracet pointer), protože po opuštění funkce se všechna data alokovaná staticky dealokují.

 
Nahoru Odpovědět  +1 16.4.2015 21:45
Avatar
Lukáš Červený:16.4.2015 21:52

Pole jako takové vrátit nemůžeš, můžeš ale vrátit ukazatel na pole (ano, jméno pole funguje jako ukazatel), kterému dynamicky alokuješ paměť. Případně můžeš vytvořit funkce dvě - jednu na zjištění délky, pak vytvořit pole a předat ho druhé funkci jako argument a ona ti ho naplní.

 
Nahoru Odpovědět  +1 16.4.2015 21:52
Avatar
David Novák
Tým ITnetwork
Avatar
Odpovídá na emedla
David Novák:16.4.2015 21:53

Jednodušeji řečeno:

Použij malloc ;) Příklady použití (včetně vracení pole z fce) by měli být někde tu v tutoriálech..

Nahoru Odpovědět  +2 16.4.2015 21:53
Chyba je mezi klávesnicí a židlí.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.