Kuulin, että C:ssä funktiot eivät voi palauttaa taulukoita. Tarvitsisin kuitenkin erään ohjelman, jossa minun pitäisi tallettaa ASCII-merkkejö neliötaulukkoon ja välillä taulukosta pitää etsiä sopivia merkkejä. Tallennusta tapahtuu useassa kohdassa, joten miten ohjelman rakenne tulee suunnitella?
Taulukon käsittelyä
7
498
Vastaukset
- 8+20=?
Voit antaa funktiolle taulukon osoitteen parametrina (viite tai osoitin), jolloin funktio voi lukea ja/tai muokata taulukon arvoja.
Voit myös palauttaa taulukon osoittimen funktiosta. Jos luot taulukon dynaamisesti funktiossa, sinun täytyy huolehtia muistin vapautuksesta kun et enää sitä tarvitse.- Ohjelmalohko
Taulukkoa ei voi käyttää tai viitata siihen sen ohjelmalohkon, jossa se on määritelty, ulkopuolella. Jos taulukko esitellään esim pääohjelmassa, silloin on mahdollista luoda (tilanvaraus ja jonkun/kaikkien alkioitten alustus ja luku) funktiossa taulukko, jota aiotaan funktion ulkopuolella käyttää tai johon aiotaan viitata. Jos taulukko esitellään funktiossa, sitä ei voi käyttää funktion ulkopuolella.
- 5+10=?
Ohjelmalohko kirjoitti:
Taulukkoa ei voi käyttää tai viitata siihen sen ohjelmalohkon, jossa se on määritelty, ulkopuolella. Jos taulukko esitellään esim pääohjelmassa, silloin on mahdollista luoda (tilanvaraus ja jonkun/kaikkien alkioitten alustus ja luku) funktiossa taulukko, jota aiotaan funktion ulkopuolella käyttää tai johon aiotaan viitata. Jos taulukko esitellään funktiossa, sitä ei voi käyttää funktion ulkopuolella.
Tuo koskee vain staattisesti luotua taulukkoa joka määritellään jo ohjelmointivaiheessa.
Voit luoda taulukon dynaamisesti malloc() avulla funktiossa ja palauttaa sen osoitteen. Kunhan sitten kanssa muistat vapauttaa muistin asianmukaisesti kun et enää tarvitse sitä.
Heitin yksinkertaisen esimerkin. Tuo luo vain merkkijonotaulukon, mutta tyyppi voi olla mitä. Osoittimien kanssa kannattaa sitten olla tarkkana.. muistin vapauttamisenkin kanssa voi joutua olemaan tarkkana monimutkaisempien rakenteiden kanssa. Tästä löytyy varmasti kirjallisuutta ja netistäkin parempaa infoa.
ps. en ole värkännyt c/c moneen moneen vuoteen joten tämä ei välttämättä ole "hyvä" esimerkki. Tarkoitus onkin vain osoittaa idea.
#include
#include
char *get_message();
int main(int argc, char* argv[])
{
char *msg = get_message();
printf(msg);
/* muista vapauttaa muisti kun et tarvitse sitä */
free(msg);
return 0;
}
char *get_message()
{
char *p = (char *)malloc(500);
if (p == 0)
{
/* tarkista aina onnistuiko muistin varaaminen, jos osoittimen arvo on 0
muistin varaaminen ei onnistunut */
printf("Virrrhe!: muistia ei saatu varattua!");
exit(1);
}
/* laita varattuun muistiin jokin viesti.. */
sprintf(p, "Hello, World!");
return p;
} - 9+6=?
5+10=? kirjoitti:
Tuo koskee vain staattisesti luotua taulukkoa joka määritellään jo ohjelmointivaiheessa.
Voit luoda taulukon dynaamisesti malloc() avulla funktiossa ja palauttaa sen osoitteen. Kunhan sitten kanssa muistat vapauttaa muistin asianmukaisesti kun et enää tarvitse sitä.
Heitin yksinkertaisen esimerkin. Tuo luo vain merkkijonotaulukon, mutta tyyppi voi olla mitä. Osoittimien kanssa kannattaa sitten olla tarkkana.. muistin vapauttamisenkin kanssa voi joutua olemaan tarkkana monimutkaisempien rakenteiden kanssa. Tästä löytyy varmasti kirjallisuutta ja netistäkin parempaa infoa.
ps. en ole värkännyt c/c moneen moneen vuoteen joten tämä ei välttämättä ole "hyvä" esimerkki. Tarkoitus onkin vain osoittaa idea.
#include
#include
char *get_message();
int main(int argc, char* argv[])
{
char *msg = get_message();
printf(msg);
/* muista vapauttaa muisti kun et tarvitse sitä */
free(msg);
return 0;
}
char *get_message()
{
char *p = (char *)malloc(500);
if (p == 0)
{
/* tarkista aina onnistuiko muistin varaaminen, jos osoittimen arvo on 0
muistin varaaminen ei onnistunut */
printf("Virrrhe!: muistia ei saatu varattua!");
exit(1);
}
/* laita varattuun muistiin jokin viesti.. */
sprintf(p, "Hello, World!");
return p;
}pah, söi include tagit stdio.h ja stdlib.h
- Ei toimi
5+10=? kirjoitti:
Tuo koskee vain staattisesti luotua taulukkoa joka määritellään jo ohjelmointivaiheessa.
Voit luoda taulukon dynaamisesti malloc() avulla funktiossa ja palauttaa sen osoitteen. Kunhan sitten kanssa muistat vapauttaa muistin asianmukaisesti kun et enää tarvitse sitä.
Heitin yksinkertaisen esimerkin. Tuo luo vain merkkijonotaulukon, mutta tyyppi voi olla mitä. Osoittimien kanssa kannattaa sitten olla tarkkana.. muistin vapauttamisenkin kanssa voi joutua olemaan tarkkana monimutkaisempien rakenteiden kanssa. Tästä löytyy varmasti kirjallisuutta ja netistäkin parempaa infoa.
ps. en ole värkännyt c/c moneen moneen vuoteen joten tämä ei välttämättä ole "hyvä" esimerkki. Tarkoitus onkin vain osoittaa idea.
#include
#include
char *get_message();
int main(int argc, char* argv[])
{
char *msg = get_message();
printf(msg);
/* muista vapauttaa muisti kun et tarvitse sitä */
free(msg);
return 0;
}
char *get_message()
{
char *p = (char *)malloc(500);
if (p == 0)
{
/* tarkista aina onnistuiko muistin varaaminen, jos osoittimen arvo on 0
muistin varaaminen ei onnistunut */
printf("Virrrhe!: muistia ei saatu varattua!");
exit(1);
}
/* laita varattuun muistiin jokin viesti.. */
sprintf(p, "Hello, World!");
return p;
}Tulee ylivuoto! Pitää varata tila taulukolle, joka funktiosta palautetaan, funktion ulkopuolella
- öaööaöa
Ei toimi kirjoitti:
Tulee ylivuoto! Pitää varata tila taulukolle, joka funktiosta palautetaan, funktion ulkopuolella
Ei pidä, kyllä se toimii.
(Toi voisi olla olisi:
printf(msg);
paremmin näin:
printf("%s\n", msg);
)
- öaööaöa
Laita taulukko globaaliksi, niin voit tallettaa/etsiä ym. mistä vain kohtaa koodia.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Mitä yhteistä on sulla ja kaivatulla?
Onko teillä samantyyppinen olemus tai luonne? Vai muistuttaako vartalonne toisiaan? Tai kasvot? Entä pukeutuminen? Onko991516Kerran oltiin mekin kahdestaan
Saanko sanoa, että minua kyllä vähän huvitti jälkeenpäin? Olit kuin vapiseva jänis ketun vieressä valmis loikkimaan paik131166- 2231146
Persut yritti estää somalinaista väittelemästä lääketieteen tohtoriksi
Yrittivät saada hänet lähihoitajakouluun, vaikka pärjäsi hyvin koulussa. Nyt hän on yliopistossa väitellyt lääketieteen251975Oikeasti, voitais mennä kahville
ja jutella niin kuin normi-ihmiset. Kyllä toivon sitä. En pelkää kohdata enkä istua sun kanssa samassa pöydässä. Miten o81959- 141930
Jos nainen harrastaa seksiä
Useiden kanssa, miten se eroaa miesten mielestä siitä, jos miehellä on ollut useita s kumppaneita? Oletan että kaikki mi179913Pihlaja-puulle
Illat on mulle pahimpia. En tiiä miks se olis vaan parasta yöstä toiseen nukkua sun kanssa ja herätä sun kasvoihin. Jos15859- 71767
Yritin keväällä unohtaa sinut nainen
mutta siinä kävi niin, että ikävä tuli korkoineen takaisin. Niin että mikä taikavoima sinulla on minuun, sitä joutuu mie31743