/* dynaam.c */ /* SJ 060498 */ /* esimerkki dynaamisesta tilanvarauksesta */ #include #include /* tilanvarausmakro */ #define NEWN(tyyppi, maara) \ ( (tyyppi*)malloc((maara)*sizeof(tyyppi)) ) /* funktio, joka palauttaa merkkijonosta löytämänsä kokonaisluvun, 0 muuten */ int luvuksi(char *m); /* funktio, joka luo ja palauttaa parametrina saamansa luvun merkkijonona */ char *merkeiksi(int l); int main() { int N = 0, virhe = 0, i, *lukutau; char **mjonotau; do { printf("Anna lukujen määrä:"); scanf("%d", &N); } while(N < 1); printf("Anna %d lukua:", N); lukutau = NEWN(int, N); /* siis sama kuin: */ /* lukutau = (int*)malloc(N*sizeof(int)); */ /* luetaan kokonaisluvut */ for(i = 0; i < N; i++) scanf("%d", &lukutau[i]); mjonotau = NEWN(char*, N); /* siis sama kuin: */ /* mjonotau = (char**)malloc(N*sizeof(char*)); */ /* siirretään luvut merkkijonomuotoon */ for(i = 0; i < N; i++) mjonotau[i] = merkeiksi(lukutau[i]); /* tarkistetaan täsmäsikö */ for(i = 0; i < N; i++) if (lukutau[i] != luvuksi(mjonotau[i])) { printf("Eipä onnistunut\n"); virhe++; } if (virhe) printf("%d virhettä!\n", virhe); else printf("Hyvin onnistui!\n"); /* vapautetaan merkkijonot */ for(i = 0; i < N; i++) { free(mjonotau[i]); mjonotau[i] = NULL; } /* vapautetaan taulukot */ free(mjonotau); free(lukutau); mjonotau = NULL; lukutau = NULL; exit(virhe); } /* main() */ /* lyhyt versio */ int luvuksi(char *m) { int luku = 0; sscanf(m, "%d", &luku); return luku; } /* luvuksi */ /* lyhyt versio */ char *merkeiksi(int l) { char *mjono; mjono = NEWN(char, 15); /* sopivan pituuden voisi laskea logaritmillakin */ /* siis sama kuin */ /* mjono = (char *)malloc(15*sizeof(char)); */ sprintf(mjono, "%d", l); return mjono; } /* merkeiksi() */