0x00 und char-arrays

Warum char-arrays halten direkt vor einem 0x00-byte erkannt wird und wie kann dieses problem vermieden werden (vielleicht durch ein mit einem anderen Datentyp (welche und warum) oder einen "trick" mit dem char)?

Zum Beispiel in dem folgenden code, wird der Ausgang "a" nur die anderen bytes werden nicht angezeigt:

unsigned char cbuffer[]={0x61,0x00,0x62,0x63,0x0};
std::string sbuffer=reinterpret_cast<const char*>(cbuffer);

cout << sbuffer << endl;

Ähnlich wie im folgenden code, wird der Ausgang "ab":

unsigned char cbuffer[]={0x61,0x62,0x00,0x63,0x0};
std::string sbuffer=reinterpret_cast<const char*>(cbuffer);

Einfache und wirksame Abhilfen, um das problem (wo 0x00 gehalten wird, in das array wie eine normale byte) würde geschätzt.

  • Ähmm. Weil strings in C sind arrays von char beendet mit einem null-byte?
  • std::vector mit überladenen operator << (ostream&, const vector<char>&).
  • Nicht unbedingt. Es ist nicht ungewöhnlich, nicht zu verwenden, nachfolgende Nullen. Die Sprache selbst nur erfordert es für string-Literale. Die Bibliotheken können auch verlangen, aber das ist nicht das gleiche.
InformationsquelleAutor Chris Smith | 2011-12-14
Schreibe einen Kommentar