Aktív témák

  • -=V3rthil=-

    őstag

    Hi!
    Kezdő programozó vagyok, és a segítségeteket szeretném kérni!
    Az lenne a kérdésem, hogy ha char*-al tárolok stringet, akkor ez lehet -e függvény visszatérési értéke, és ha igen, akkor pontosan mit ad vissza? Konkrétan pl lehet ilyen, hogy :
    char* fgv(char* valami) {
    char *adat=''akármi'';

    .
    .
    .
    return(adat);
    }
    Akkor ez mit ad vissza? Címet? De elvileg az a string még megvan a memóriában? Vagy hogy van ez? És ez a függvény hogy kapja meg paraméterként a char*-ot? Bocs a lamerkedésért, csak házim csiszolgatásához kellene! Thnx előre is!

    hey-ho-let's-go

  • bocs

    csendes tag

    válasz -=V3rthil=- #1 üzenetére

    1. char*-al nem tárolsz stringet.
    csak karakterek egymásutánjaként tárolhatsz stringet, a char* csak megmondja az első betű címét a memóriában.

    2. ha ez egy fgv visszatérési értéke, akkor azt adod vissza, hogy hol található egy karaktersorozat a memóriában. ez egy szám, pl 1324598375 ami az ennyiedik bájtot mutatja meg a memóriában (nagyon leegyszerűsítve)

    3. nagyon fontos tehát, hogy nem magukkal a karaktersorozatokkal dobálózol függvénybe be és abból ki, hanem csak az első kar. címével. A karaktereknek való bájtsorozat lefoglalásával, feltöltésével még ezen felül meg kell birkózni.
    A példádban az ''akármi'' egy string konstans, vagyis a fordító neked bepakolja egy konstansok számára fenntartott adatterületre, és ha azt --- char *adat --- változóba töltöd be, akkor csak egy db pointert, az első betű, az 'a' címét töltötted be az adat nevű változóba. Ez a pointer érték, ami ugye egy egész szám, simán visszaadható függvényből, amennyiben a függvényből való kilépéskor még mindig ugyanott létezik az a string, amire mutat.

    Mivel a konstans az mindig ott marad, ahol a program indulásakor került, senki sem bántja, a példád működik.

    Katasztrofális eredmény lesz viszont, ha olyan szövegfüzér címét adod vissza, ami aztán a függvényből való kilépéskor megsemmisül:

    char* fgv(char* valami)
    {
    char kartomb[5] = ''1234'';
    char *adat = kartomb;
    ...
    return adat;
    }

    /egyébként return-nek nem kell zárójel/

    -bocs a hardwerláma-

  • amargo

    addikt

    bocs elég jól leírta (bár csak átfutottam rajta)
    ha *-gal jelölsz meg vmi az csak mutató lesz egy pointer.. tényleges adatot nem tárol.. csak a címre mutatot adat kezdő címét.
    mutatóval nem térhetsz vissza(bár lehet, hogy kilehet ügyeskedni.. csak értelme nincs).. mivel nem tartalmaz tényleges adatot.
    itt egy pl:
    void main(void)
    {
    int getword(char[]);
    char szov[100];
    getword(szov);
    printf(''%s'',szov);
    }
    int getword(char tomb[])
    {
    int db;char ch;
    for(db=0;(ch=getche())!=' ' && ch!=' ' && ch!=' ';db++)


    tomb[db]=ch;
    tomb[db]='

    “The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”

Aktív témák