Avatar
emedla
Člen
Avatar
emedla:

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:

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ý:

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:

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.