Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

11

24.10.2011, 20:11

Ah aber ich glaube damit habe ich es irgendwann auch versucht und hatte Probleme...
Achja genau:

Wenn ich das char* aus der Datei kriege, kann ich es ja einfach in einen String einfügen.
Wenn ich jetzt allerdings wieder den Wert haben möchte, habe ich bisher nur die Möglichkeit gefunden, den String in const char[] zu casten, jedoch nicht in char[] oder char*.
Oder habe ich da eine Funktion übersehen?

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

12

24.10.2011, 20:11

Du musst im Konstruktor m_pContent auf NULL setzen. Ansonsten dürfte das nicht passieren.

EDIT: Schau dir mal std::string::operator= und std::string::c_str() an.

13

24.10.2011, 20:32

Okay...
Habe ich gemacht, jetzt kommt aber ein anderer Fehler:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    ifstream file("myfile.txt");
    char* buffer = NULL;
    buffer = new char[51];

    int index = 0;
    while(!file.eof())
    {
        file.getline(buffer, 50);

        xxx[index] = new Cxxx();
        xxx[index]->Fill(buffer);
        
    
        index++;
    }


Cxxx = Klasse
xxx = Array der Klasse Cxxx

Jetzt kommt bei mir bei dem 2. Durchlauf dieser Schleife bei der Zeile file.getline(buffer, 50); wieder ein Fehler:
Unbehandelte Ausnahme bei 0x7729e653 in MyProject.exe: 0xC0000374: Ein Heap wurde beschädigt.

BurningWave

Alter Hase

Beiträge: 1 106

Wohnort: Filderstadt/Konstanz

Beruf: Student

  • Private Nachricht senden

14

24.10.2011, 20:54

Ist die Zeile, die du aus der Datei lesen willst zufällig länger, als 50 Zeichen? Wenn ja, dann läuft buffer über. Du löscht buffer außerdem nirgends! Ein Array tut es hier auch: char buffer[51];

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

15

24.10.2011, 21:02

C-/C++-Quelltext

1
2
3
4
5
std::string line;
while (std::getline(file, line))
{
  // mach was mit line
}

fertig.

16

25.10.2011, 21:22

Okay, also jetzt habe ich etwa folgendes versucht:

main.hpp

C-/C++-Quelltext

1
2
3
//...............
string* m_pStringList[2000000];
//...............


ich mache mit absicht einen String pointer, da ich später noch plane, die Länge dynamisch zuzuweisen (da das ganze sonst zu viel Speicher verschlingen würde).

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
    ifstream file("myfile.txt");
    std::string buffer;
    int index = 0;

    while (std::getline(file, buffer))
    {
        m_pStringList[index] = buffer;
        index++;
    }


Fehler (der nicht beim Kompilieren sondern durch eine Rote unterstreichung von "= buffer" angezeigt wird):
Es ist keine passende Konvertierungsfunktion von ""std::string"" in ""std::string *"" vorhanden.

Ich habe schon vieles im Kopf durchgespielt, wie zum Beispiel "= &buffer;", aber da sich "buffer" ja bei jedem Durchlauf der Schleife ändert, würde es doch alle Einträge ändern, wenn ich nur einen Zeiger darauf hinterlassen würde...

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

17

25.10.2011, 21:54

Ich würde das ganze in ne std::list packen.
Das Ding so groß machen wie Zeilen in der Datei sind und dann wie dot geschrieben hat einlesen...
Die Zuweisung kann in Deinem Fall nicht passen, der Grund ist klar: string und string* sind zwei verschiedene Datentypen.

18

25.10.2011, 21:58

Ja meine Frage war eigentlich, wie man das doch irgendwie hinkriegt, aber trotzdem ist std::list eine gute idee...
Hätte ich bedenken sollen, ich baue es gleich mal ein.

19

26.10.2011, 14:17

Okay jetzt habe ich folgendes gemacht:

hpp

C-/C++-Quelltext

1
2
    list<string>m_sWordList;
    list<string>::iterator m_iWordList;


cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
    ifstream file("myfile.txt");
    std::string buffer;

    while (std::getline(file, buffer))
    {
        if (buffer != "" && buffer != " " && buffer != "  " && buffer != "   " && buffer != "    " && buffer != "     ")
            m_sWordList.push_back(buffer);
    }




Ich denke, dass das soweit funktionieren sollte, aber jetzt möchte ich sowas in der Art machen:

C-/C++-Quelltext

1
2
int pos = tbIntRandom(0, m_sWordList.size());
string MyString = m_sWordList.???


Ich habe mir diverse Tutorials durchgeschaut, bin aber nicht daraufgekommen, wie man ohne eine (vermutlich sehr langsame) for- schleife den String an einer Position zu erhalten, die in einem Integer abgespeichert ist.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

20

26.10.2011, 14:26

Nimm einen vector statt einer list.

Werbeanzeige