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

Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

1

27.01.2011, 17:33

Problem beim Öffnen von Dateien

Sehr geehrtes Forum, ich habe ein kleines Problem,
wenn ich auf folgende Weise eine Datei öffne, und dann das char[] array ausgebe, so fehlt die letzte Zeile, weshalb,
kann mir einer helfen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
//  Daten aus Datei lesen
    ifstream data(credits_path.c_str(),ios::in);

    data.seekg (0, ios::end);
    int length = data.tellg();
    data.seekg (0, ios::beg);

    char* text = new char[length];
    data.read(text,length);

    data.close();


M.f.G. Developer_X
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

27.01.2011, 17:46

Was genau heißt es dass die letzte Zeile fehlt?

Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

3

27.01.2011, 17:49

wenn ich das char array ausgebe, muss ich feststellen dass die er alles bis auf die letzte zeile ausgibt, und somit nicht korrekt eingelesen hat
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

27.01.2011, 17:51

Das ist komisch. Wie genau gibst du das char array denn aus? Kanns nicht irgendwie daran liegen dass die normalerweise übliche Nullterminierung fehlt?

Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

5

27.01.2011, 18:10

Hört sich jetzt vielleicht verrückt an, aber jetzt geht es,
das ist doch wirklich gegen die menschliche vernunft oder?!
Ich habe nichts am Code geändert, oder sonst etwas, jetzt gehts
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

6

27.01.2011, 18:18

Jetzt gehts schon wieder nicht, wenn ich das programm mehrmals starte, gibt er das char array immer ein bisschen anders aus, und zwar immer nur die letzte Zeile verändert

Ich weiß ja nicht was das hier jetzt soll?!
Außerdem pfeift das Programm, als ob Beep aufgerufen wird, was aber nicht geschieht, und ich kann wirklich versichern, dass ich die datei
nirgendwo öffne, verändere, und speichere,
hat jemand von euch ne Idee woran das liegen könnte?
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

7

27.01.2011, 18:19

Wie schon gesagt, ich sehe nirgendwo wie du deinen String Nullterminierst. Wenn du einen nicht nullterminierten String mit cout oder printf() ausgibst können natürlich alle möglichen merkwürdigen Dinge passieren da über die Grenze deines Arrays hinaus so lange jedes Byte was dort zufällig im Speicher liegt ausgegeben wird bis eines davon 0 ist. Wenn da ein paar mit dem Wert 7 vorkommen kanns auch schonmal piepen...

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (27.01.2011, 18:25)


Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

8

27.01.2011, 18:27

Es ist so, wenn ich die Daten verarbeite, will ich sie zu tokens machen, diese tokens sind nämlich durch ein
'\n' getrennt, und zwar so, doch der Rest, also der letzte Token, ist irgendwie nicht korrekt, da er noch Sachen enthält, am Ende, wie kann
ich das denn mit der 0-Terminierung bei strings machen?

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
//  Daten aus Datei lesen
    ifstream data(credits_path.c_str(),ios::in);

    data.seekg (0, ios::end);
    int length = data.tellg();
    data.seekg (0, ios::beg);

    char* text = new char[length];
    data.read(text,length);

    data.close();

//  Daten verarbeiten
    string sToken;
    vector<string> tokens;
    for(int i = 0;i<length;i++)
    {
        if(text[i]=='\n'||i==length-1)
        {
            tokens.push_back(sToken);
            sToken = "";
        }
        else
        {
            sToken = sToken + text[i];
        }
    }


Was kann ich da anders machen ?
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

Developer_X

Treue Seele

  • »Developer_X« ist der Autor dieses Themas

Beiträge: 247

Wohnort: Hessen

Beruf: Schüler

  • Private Nachricht senden

9

27.01.2011, 18:32

Ach jetzt geht es, trotzdem danke!
- Die Zeit ist wie ein Fluss, und die Gegenwart wie ein Fels, der von dem Fluss der Zeit geschliffen wird. -
Kevin Riehl

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

27.01.2011, 18:36

Es ging immer schon, das Problem war nur die Ausgabe...

Vergiss übrigens nicht deinen text auch wieder zu deleten ;)

Werbeanzeige