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

t512

Frischling

  • »t512« ist der Autor dieses Themas
  • Private Nachricht senden

1

17.11.2008, 16:36

Datei wird scheinbar falsch gelesen

Hallo. Ich mache gerade die Übung aus dem Buch, bei der man eine Matrix und Vektoren in eine Textdatei schreiben soll, die dann vom Programm gelesen wird. Um zu schauen, ob alles funktioniert soll einfach mal der Inhalt der Textdatei so ausgegeben werden, wie er später gelesen wird.

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
28
#include <TriBase.h>
#include <iostream>
#include <string>
using namespace std;

int main()
{
    tbInit();

    tbVFile* VFile = new tbVFile;
    VFile->Init("Eingabe.txt");
    void* pAusgabe;

    VFile->Read(VFile->GetSize(), pAusgabe);
    
    char* pcAusgabe = (char*)pAusgabe;

        // das Ausrufezeichen markiert das Ende der Textdatei

    while(*pcAusgabe != '!')
    {
        cout << *pcAusgabe;
        pcAusgabe++;
    }

    tbExit();

    return 0;
}


Die Datei Eingabe.txt sieht so aus:
Matrix 1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

Vector 1 2 3
Vector 1 0 1
!

Wenn ich das Programm laufen lasse, passieren 2 seltsame Dinge.
1. Vor der ersten Null erscheint ein Zeichen, das sich nicht in der Textdatei befindet. Z.b. wird "Matrix 1L0 0 0" oder "Matrix 1|0 0 0" ausgegeben.

2. Nachdem die letzte Zeile ausgegeben wurde erscheint eine Fehlermeldung: "Die Anweisung in "0x7c9..." verweist auf Speicher in "0x0a...". Der Vorgang "written" konnte nicht auf dem Speicher durchgeführt werden.

wenn ich mit dem Debugger Zeile für Zeile durchgehe erscheint diese Meldung nicht.

xardias

Community-Fossil

Beiträge: 2 731

Wohnort: Santa Clara, CA

Beruf: Software Engineer

  • Private Nachricht senden

2

17.11.2008, 17:48

Ich denke, dass letzteres daran liegen könnte, dass die Textdatei ein anderes Textencoding nutzt.
c-strings haben aber eine schöne Eigenschaft, sie sind in der Regel 0-terminiert. d.h. while(*pcAusgabe != 0) sollte es hier tun. Alternativ kennst du auch die Größe der Datei und kannst eine for schleife benutzen.

t512

Frischling

  • »t512« ist der Autor dieses Themas
  • Private Nachricht senden

3

17.11.2008, 19:16

Mit der Dateigröße und einer For-Schleife habe ich es zu Beginn auch gemacht, aber anscheinend beinhaltet eine txt-Datei noch eine menge Leerzeichen nach dem Text, die ich nicht angezeigt haben wollte.

Irgendeine Idee, wie ich eines der Probleme angehen könnte. Du hast doch bestimmt auch mal die Aufgaben gelöst.

Anonymous

unregistriert

4

17.11.2008, 19:56

Benutz doch die C++ Streams?

t512

Frischling

  • »t512« ist der Autor dieses Themas
  • Private Nachricht senden

5

17.11.2008, 20:21

ofstream und ifstream? Ich werds mal testen...
Mit VFiles wärs so schön einfach gegangen :(

t512

Frischling

  • »t512« ist der Autor dieses Themas
  • Private Nachricht senden

6

18.11.2008, 18:48

Mit ifstream hat jetzt alles reibungslos geklappt. Ich weiß zwar noch wenig über Anwendungsmöglichkeiten von virtuellen Dateien, aber dass man mit ihnen nicht mal nen Text lesen kann hat mich schon verwundert.

Faule Socke

Community-Fossil

Beiträge: 1 915

Wohnort: Schreibtischstuhl

  • Private Nachricht senden

7

19.11.2008, 20:40

Du kannst auch mit nem Hexeditor schauen, was genau in der Datei drin ist btw...

Socke

Beneroth

Alter Hase

Beiträge: 969

Wohnort: Schweiz

Beruf: Software Entwickler

  • Private Nachricht senden

8

20.11.2008, 01:15

Zitat von »"t512"«

Mit ifstream hat jetzt alles reibungslos geklappt. Ich weiß zwar noch wenig über Anwendungsmöglichkeiten von virtuellen Dateien, aber dass man mit ihnen nicht mal nen Text lesen kann hat mich schon verwundert.


es gibt auch noch String-Streams ;)

Werbeanzeige