tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Thomasio
ERLEDIGT
JA
ANTWORTEN
4
ZUGRIFFE
1679
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    crazy_root crazy_root ist offline Mitglied
    Registriert seit
    Sep 2007
    Beiträge
    22
    HaLo!

    Google und Such-Funktionen sagen, dass das Thema schon 1000 mal durchgekaut worden is. Nur leider blick ich noch immer nicht ganz durch, wie ich das bewerkstelligen soll
    Pointer, etc. viel zu kompliziert zu verstehen

    In PHP würd das in etwas so aussehen....

    PHP-Code:
    <?php
    $array 
    = array();
    //...
    while ($file readdir($handle)) {
        
    $array[] = $file;
    }
    //...
    ?>
    Logisch wäre dann natürlich in C++

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    char** name;    // keine Ahnung was das ** bewirkt, aber soll angeblich dann ein Array sein
    int i = 0, j = 0;
    //...
    while (datei = readdir(verzeichnis)) {
        name[i++] = datei->d_name;
    }                
    //...
    for (j = 0; j < i; j++) {
        cout<<name[j]<<endl;    // Dieser Teil funktioniert eben nicht
    }
    //...

    Wenn ich jedoch den String manuell zuweise und ausgebe funktionierst...


    Ich hab schon zig Vorschläge im Netz gelesen und jeder macht es anders.... Da soll man sich auskennen?
    "So einfach als nötig" heißt es doch...

    http://www.tutorials.de/forum/c-c/28...klarieren.html
    So wie "Winner" es im 2 Beitrag schildert bräuchte ichs auch.
    Nur halt dynamisch zuweisen, sprich ich kenn [x][y] nicht..

    Ich blick halt einfach nicht durch...

    Danke für euer Hilfe!
    Geändert von crazy_root (27.09.08 um 21:06 Uhr)
     

  2. #2
    Registriert seit
    Dec 2001
    Ort
    Bayern
    Beiträge
    5.800
    Blog-Einträge
    5
    Hallo,

    wenn du keine Ahnung hast, was ** bewirkt, dann solltest du dir wirklich erst mal die Grundlagen von C aneignen. An Zeigern wirst du so und so nicht vorbeikommen.

    Du machst hier gleich mehrere Sachen falsch. Erstens dereferenzierst du einen Zeiger, ohne ihn zuvor initialisiert zu haben (name). Dass das Programm überhaupt läuft, ist also mehr Zufall als alles andere. Zweitens speicherst du mit der Zuweisung name[i++] = datei->d_name einen Zeiger auf einen Speicherbereich, von dem du nicht weißt, ob er nach dem nächsten Aufruf von readdir überhaupt noch gültig ist. Und nicht zuletzt mischst du C- (char *) und C++-Stil (cout).

    Also am besten arbeitest du dich erst mal in die Speicherverwaltung mit C/C++ ein, denn die Fehler die du gemacht hast sind ziemlich grundlegender Natur.

    Grüße,
    Matthias
     
    „Gib einem Menschen einen Fisch, und er wird für einen Tag satt. Lehre ihn Fischen, und er wird ein Leben lang satt.“
    “For every complex problem, there is an answer that is short, simple and wrong.”
    “Pessimism is safe, but optimism is a lot faster!”


    Aktuelles Coding Quiz: #17 - Wörter kreuz und quer

  3. #3
    Thomasio Thomasio ist offline Mitglied Platin
    Registriert seit
    Aug 2006
    Beiträge
    680
    Der grundlegende Unterschied ist, dass es in C/C++ keinen vordefinierten Wert für undefinierte Variablen gibt (oder so ähnlich).
    Zu deutsch, definierst du ein array, ist dessen Grösse erstmal NULL.
    Da rein speichern kannst du gar nichts, solange du den dafür nötigen Speicher nicht reserviert hast.
    Ich stehe mit alloc und malloc auch auf Kriegsfuss, aber es gibt da std::string und std::vector, damit kommt man zumindest halbwegs an das ran, was man aus PHP gewohnt ist.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    
    #include <string>
    #include <vector>
     
    //array definieren
    std::vector<std::string>MyArray;
     
    //Eintrag einfügen
    MyArray.push_back("irgendwas");
     
    //Anzahl Einträge
    int Anzahl = MyArray.size();
     
    //Einzelner Eintrag
    std::string EintragNrEins = MyArray[0];
     
    //loop durchs Array
    for(UINT i = 0; i < MyArray.size(); i++)
    {
    // mach irgendwas
    }

    Aber Vorsicht, auch wenn push_back() automatisch den nötigen Speicher bereit stellt, du hast nach wie vor nur genau so viel Platz im Array wie reserviert ist, und alles was nicht definiert ist, gibt es nicht.
    Hat das Array nur 3 Einträge und man versucht irgendwas mit MyArray[4] stürzt die Anwendung gnadenlos ab und man kann auch nicht MyArray[5] definieren, solange MyArray[4] nicht existiert.
    crazy_root bedankt sich. 

  4. #4
    Registriert seit
    Jan 2003
    Ort
    Roßdorf (Hessen)
    Beiträge
    196
    @ thomasio:
    wobei es sich hier streng genommen nicht um ein array handelt sondern um eine container klasse die den [] operator überschreibt
     

  5. #5
    crazy_root crazy_root ist offline Mitglied
    Registriert seit
    Sep 2007
    Beiträge
    22
    @Thomasio
    Danke, genau das hab ich gebraucht!
    Einfach, aber genial

    @Matthias Reitinger
    Führt anscheinend kein Weg daran vorbei...

    Danke euch!
     

Ähnliche Themen

  1. Antworten: 1
    Letzter Beitrag: 29.10.08, 20:44
  2. Einem Textfeld einen String aus einer Variablen zuweisen
    Von Blace im Forum Borland CBuilder und VCL
    Antworten: 1
    Letzter Beitrag: 22.01.08, 00:13
  3. nummerisches Zeichen in string finden
    Von Bamboocha_10 im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 30.10.07, 16:54
  4. map-Elemente einem String zuweisen?
    Von LadyMarion im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 11.09.07, 11:26
  5. F: char-Array einem Sting zuweisen
    Von smallone im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 09.11.04, 13:05