Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Frage zu Array qaus Zeichenketten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.11.2006, 13:36 Uhr
WindDancer1



Hi Leute ,

ich hab hier mal ne etwas allgemeinere Frage zu nem Array aus Zeichenkettenketten.
Ich habe eine Fünktion geschrieben die mir schlicht und einfach nur ein Array aus Zeichenketten zurückgibt **arrayBack().
Der PointerPointer char **myArr dient zur Aufnahme des Rückgabewertes.
Über den Arrayzugriffsoperator kann ich auf jede beliebige Zeichenkette des Arrays zugreifen, aber nur auf eine, möchte ich auf eine zweite oder dritte Zeichenkette zugreifen muss ich immer wieder die Fuktion bzw. ihren Rüchgabewert erneut zuqweisen. Das kann doch nicht sein, über eine Schleife muss es doch dann möglichsein alle Zeichenketten nacheinander auszulesen, sonst müsste ich bei einem Array mit z.b.: 100 Zeichenketten 100 mal zuweisen.
Aber was mach ich falsch und wie geht’s richtig?

Hier der Source:


C++:
# include <iostream>

using namespace std;



char **arrayBack();                // Prototype für ein char - Array als Return Wert

void main()
{

    char **myArr = NULL;;        // Deklaration eines Pointers auf ein Array aus Zeichenketten
    myArr = arrayBack();        // Dem Pointer wird der Returnwert der Funktion arrayBack (ein Array aus Zeichenketten) zugewiesen


    cout << myArr[2] << endl;    // Ausgabe des Pointers an Stelle 2
    cout << arrayBack()[3] << endl; // funktioniert aber warum funktioniert das und die Zeile darunter nicht

    
    cout << myArr[4] << endl;    // Ausgabe des Pointers an Stelle 4 funktioniert nicht


    myArr = arrayBack();        // Jetzt nach erneuter Zuweisung geht's wieder
    cout << myArr[4] << endl;

}



char **arrayBack()
{
    char *myArr[]= {"Alpha","Beta","Gamma","Delta","Epsilon"}; // Deklaration und initialisierung des Arrays aus Zeichenketten

    return myArr; // Rückgabe des Arrays
}



Vielen Dank schon mal vorab für eure Hilfe

WindDancer
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.11.2006, 14:07 Uhr
Blubber2063



Weil du eigentlich Stack Smashing betreibst, der Speicher den du zurück gibst liegt auf dem Stack und gehört dir eigentlich nicht mehr nach dem du die Funktion verlassen hast, du musst den Speicher für das Feld allozieren wenn du es ausserhalb der Funktion benutzen willst.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.11.2006, 16:01 Uhr
WindDancer1



D*A*N*K*E Blubber2063 ,

ich hab tatsächlich übersehen dass ich das Array in der Funktion nicht static gemacht hab .

WindDancer


C++:
# include <iostream>

using namespace std;
                
char **arrayBack();                // Prototype für ein char - Array als Return Wert



void main()
{
    char **ptrArr = NULL;;        // Deklaration eines Pointers auf ein Array aus Zeichenketten
    ptrArr = arrayBack();        // Dem PointerPointer den Rückgabewert des Arrays zuordnen

    cout << ptrArr[0] << endl;
    cout << ptrArr[1] << endl;
    cout << ptrArr[2] << endl;
    cout << ptrArr[3] << endl;
    cout << ptrArr[4] << endl;
}



char **arrayBack()
{
    static char *myArr[]= {"Alpha","Beta","Gamma","Delta","Epsilon"};
    return myArr;         // Rückgabe des Arrays
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.11.2006, 10:51 Uhr
Th



Dann sollte dein Array und der Rückgabetyp aber auch mit 'const' gekennzeichnet werden, denn Änderungen an den in "" stehenden Strings sollten nicht gemacht werden können (da das BS diese in einen read-only Bereich ablegen dürfte.)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: