Почему массивы char останавливаются прямо перед обнаружением байта 0x00 и как можно избежать этой проблемы (возможно, используя другой тип данных (какой и почему) или «трюк» с char)?0x00 и char arrays
Например, в следующем коде, выход «а» только, остальные байты не отображаются:
unsigned char cbuffer[]={0x61,0x00,0x62,0x63,0x0};
std::string sbuffer=reinterpret_cast<const char*>(cbuffer);
cout << sbuffer << endl;
Аналогично в следующем коде, выход «AB»:
unsigned char cbuffer[]={0x61,0x62,0x00,0x63,0x0};
std::string sbuffer=reinterpret_cast<const char*>(cbuffer);
Простые и эффективные обходные пути проблемы (где 0x00 хранится в массиве как обычный байт).
Ummm. Поскольку строки в C являются массивами символов, завершенных нулевым байтом? –
std :: vector с перегруженным оператором << (ostream &, const vector &) '. –
moshbear
@HeathHunnicutt: Не обязательно. Нередко не использовать конечные нули. Сам язык требует только строки _literals_. Библиотеки также могут потребовать его, но это не одно и то же. –