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

1

30.03.2012, 20:40

Problem mit dem einlesen eines char Arrays aus einem FILE Objekt

Hallo Zusammen,
Ich rätsele schon seit ein paar Tagen an diesem Problem. Ich schreibe zurzeit für ein Spiel einen kleinen Karten Compiler, welcher die Grunddaten einer Karte, bis jetzt nur die Spieler Anzahl und der Kartenname, speichern soll. So weit tut er das auch, allerdings gibt es Probleme beim einlesen des Kartennamens. Dies tut folgender Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
char puffer1;
std::string puffer2;

do
{
    fread(&puffer1, sizeof(char), 1, file);
    puffer2.append(&puffer1);
}
while(puffer5!=0);


Wenn Ich es debugge, liest er erst vier nullen und beginnt dann erst mit dem Namen (fand Ich heraus indem Ich das ganze in eine for Schleife steckte). Ich hatte das nicht im Code des Karten Compilers vorgesehen. Warum ist das so, und hat das irgendeine besondere Bewandtnis?

Hier der Code mit dem der Name in die Datei geschrieben wird:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
std::string Name;

...

std::string str=argv[i+1];
Name=new char[str.length()];
Name=str.data();

...

fseek(file, 0, SEEK_SET);
fwrite(&ID, sizeof(Name), 1, file);
fwrite(&Spieler, sizeof(Spieler), 1, file);
fwrite(&Name.c_str(), Name.length(), 1, file);


Das ganze kann Ich zwar mit fseek umgehen allerdings wäre es trotzdem schön wenn Ich das beheben könnte.

2

30.03.2012, 20:43

Hab mich verzählt, es sind drei nullen :)

3

01.04.2012, 11:21

Keiner hat eine Ahnung?

Sp3iky

Treue Seele

Beiträge: 232

Beruf: Entwicklungsingenieur

  • Private Nachricht senden

4

01.04.2012, 11:52

Speziell kann ich dir da gerade nicht helfen, aber warum nutzt du im Programm die stl-Funktionalitäten, gehst für den DateiIO-Kram wieder zurück auf C? Nutz doch ofstream/ifstream. Damit lässt sich deutlich leichter arbeiten und die Fehleranfälligkeit wird auf vermindert.

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

5

01.04.2012, 11:54

puffer2.append(&puffer1);

In der Zeile ist dein Fehler.
Ich überlasse es dir, herauszufinden, was da genau falsch ist ;)

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

01.04.2012, 13:45

Die Zeile würde ich auch mal überdenken:

C-/C++-Quelltext

1
fwrite(&ID, sizeof(Name), 1, file);


Fraglich ist auch woher Du erkennen willst wie lang der "Name" in der Datei ist, wenn Du diese Länge nirgendwo abspeicherst.
Strukturen ("Spieler") RAW in eine Datei zu schreiben ist auch eine ganz schlechte Idee -> Thema Alignment und Referenz-Typen.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »BlueCobold« (01.04.2012, 13:52)


Werbeanzeige