[C] Otočenie stringu + zmena na pole intov

Programovacie jazyky, rady, poradňa...
Hensym
VIP
VIP
Používateľov profilový obrázok
Príspevky: 6978
Registrovaný: 24 apr 2011, 0:53
Bydlisko: Zvolen

[C] Otočenie stringu + zmena na pole intov

Príspevok od používateľa Hensym »

Ahojte, robím jeden program, a celý progres je zaseknutý na jednej malej funkcii.

Povedzme, že mám na vstupe číslice 78921321, zapísané do stringu. Potom mám funkciu otocPole, ktorá poradie týchto čísel otočí a zmení na inty:

Kód: Vybrať všetko

int *otocPole(char a[]){
  int *pole, i, j;
  int len = strlen(a);
  
  pole = (int*) malloc(len);
  for(i=0, j=strlen(a)-1; i<strlen(a); i++, j--){
    pole[i] = a[j] - 48;
    <kontrolný výpis pre pole[i]>
  }
  return pole;
}
funkciu volám takto:

Kód: Vybrať všetko

int *i_a
...
i_a = otocPole(a);
Po vykonaní funkcie by som teda mal dostať číslo: 12312987
Pokiaľ spustím ten kontrolný výpis vo for cykle, tak to sedí a čísla naozaj vypíše tak, ako chcem.
Akonáhle ale vrátim hotové pole, a vypíšem ho napríklad v maine, tak mi vypíše: 123129330

Skrátka, pole[6] by malo byť 8, a z nejakého dôvodu je to 33, a pole[7] by malo byť 7, ale z nejakého dôvodu je to 0.
Pokiaľ manuálne vypíšem pole[6] alebo pole[7] ešte vo funkcii, vypíšu sa správne, ale akonáhle ich vypisujem po vynesení, vypisuje 33 a 0. Vie mi niekto pomôcť? Ďakujem.
Fabo
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 6810
Registrovaný: 16 nov 2007, 17:23
Bydlisko: 's Chravenhache
Kontaktovať používateľa:

Re: [C] Otočenie stringu + zmena na pole intov

Príspevok od používateľa Fabo »

Celkom som nepochopil ako to ma fungovat, ako tam zapada to pole intov.
Nebolo by lepsie otocit char pole do char pola a potom pouzit nejake atoi alebo take nieco?

edit: tak uz mozno zacinam trochu chapat. Nepreteka ti tam nieco? Skus alokovat priestor pre *i_a dopredu.
lowmanek
Light Professional
Light Professional
Používateľov profilový obrázok
Príspevky: 977
Registrovaný: 04 apr 2010, 8:53
Bydlisko: 221B Baker Street

Re: [C] Otočenie stringu + zmena na pole intov

Príspevok od používateľa lowmanek »

Chyba je v tom, ako alokuješ dynamickú pamäť v tej funkcii.
Malloc funguje tak, že do jeho parametru vložíš, koľko za sebou idúcich bytov v pamäti potrebuješ a on (ak je to možné) ti ich dá. Ty ich ešte musíš pretypovať na typ, ktorý máš na ľavej strane (malloc vracia void* a ty potrebuješ int*). Podstatné je, že do parametru vkladáš počet bytov a na jeden int je treba sizeof(int) bytov. Preto správne to má vyzerať:

Kód: Vybrať všetko

pole = (int*) malloc(len * sizeof(int));
Napísať odpoveď