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

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

41

11.12.2006, 22:11

Zitat von »"Draculark"«

Zitat

Mal angenommen du würdest einen String gespeichert kriegen. Der liegt dann in der Datei - und? Wie willst du später rauskriegen, wo er aufhört?


man könnte ja annehmen,dass das ding so klug ist,dass es weißt,wenn nach nem buchstaben LANGE nix mehr kommt,dass da das ende ist...

oder,dass es nen string automatisch mit nem zeichen verseht z.b. \send oder sowas und das an jeden string am ende hinzugeadded wird,dass man eben weiß,wo der aufhört:D

aber ist halt ned so^^


Wie kommt man zu so eine Annahme? Wenn du die quasi Rohdaten speicherst hat C++ doch garkeine Informationen über Typen und auch nicht über irgendwelche Stringlängen mehr. Es wird einfach alles runtergeschrieben, so wie es vom Programm verlangt wird. Alles andere wäre nicht der gewünschte Effekt!

grüße
@D13_Dreinig

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

42

11.12.2006, 22:13

@David:

klar, die Methode str.lenght()+1 * wchar_t, deswegen auch basic_string, man müsste natrülich die Länge mit Speichern, oder GetPrivateProfileString (INI's)

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

43

11.12.2006, 22:16

Zitat von »"koschka"«

@David:

klar, die Methode str.lenght()+1 * wchar_t, deswegen auch basic_string


Es drehte sich bislang um den sizeof() Operator und der hilft bei Stringobjekten auch nicht weiter. Über length() * sizeof( type ) funktioniert das zwar, aber im Endeffekt muss trotzdem die Länge des gespeicherten Strings irgendwie markiert werden.

Achja, std::wstring ist eine Typendefinition für std::basic_string< wchar_t >, das funktioniert also genauso! :)

grüße
@D13_Dreinig

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

44

11.12.2006, 22:19

ich weiss ^^ ich wollt nur das wchar_t "hervorheben" ;)

Aber wo ist den nun das Problem? Man speichert einfach die Länge des Strings mit.

Sizeof gibt ja nur die Größe eines Types an, wenn das ein Array ist, rechnet man eben die Größe des Types * Anzahl der Einträge.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

45

11.12.2006, 22:32

Meine Rede! In etwa so könnte das aussschaun:

C-/C++-Quelltext

1
2
3
4
5
template< typename Type >
inline std::size_t StrMemSize( const Type& str )
{
    return str.length() * sizeof( Type::value_type );
}


Allerdings kann dann, beim Einlesen, immer noch nicht festgestellt werden ob char, wchar_t oder sonst für ein Typ verwendet wurde.

grüße
@D13_Dreinig

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

46

11.12.2006, 22:37

Jep ^^, aber ich denke das man hier sich hier auf einen Typ einigen kann, wenn nicht, einfach die größe des Types noch mit Speichern.

grek40

Alter Hase

Beiträge: 1 491

Wohnort: Dresden

  • Private Nachricht senden

47

11.12.2006, 23:13

Zitat von »"koschka"«


C-/C++-Quelltext

1
2
3
4
#include <string>
...
std::basic_string<wchar_t> tmp = "Hallo Ich bin'n Sting :) ";
...

[...]

ich weiss ^^ ich wollt nur das wchar_t "hervorheben"

Also das gibt jetzt aber haue... ich wollt erst nix sagen, aber extra hervorheben und dann das 'L' vergessen :p

koschka

Community-Fossil

Beiträge: 2 862

Wohnort: Dresden

Beruf: Student

  • Private Nachricht senden

48

11.12.2006, 23:45

jep hast recht ^^ vor den String kommtn L ;) thx

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

49

12.12.2006, 08:17

Zitat von »"koschka"«

Jep ^^, aber ich denke das man hier sich hier auf einen Typ einigen kann, wenn nicht, einfach die größe des Types noch mit Speichern.


Man will ja dynamisch bleiben! :-P
@D13_Dreinig

50

12.12.2006, 11:09

so dann letzte frage :D

also muss ich dann jeden typ extraabspeichern oder wie?

also ich mein folgendes:

die klasse CHero besteht aus:

"normalen" variablen : int,char,bool
"sonder" variablen : string
klassen variablen : CItem


muss ich jetzt die normalen,sonder und klassenvariablen jeweils extra sbepcihern oder?

für die normalen eben das,was ich schon stehen habe, für den string noch das mit der länge ergänzen (und dieses wchar_T verwenden ... muss ich mir erst noch durchlesen^^).
und dann noch die CItem klassen extraabspeichern?

also ich dachte nicht,dass sowas so umständlich ist, für ein simplex "textadventure"... :(

Werbeanzeige