C++ copy std::string to char array with no null termination

Я пишу в двоичный файл, используя структуру, содержащую только char[32]. В основном мне нужно отформатировать каждый блок данных, выполняя различные вычисления в массивах строк и объединяя результаты. Я пытаюсь скопировать строку std::string в массив char без нулевого завершения. Чем больше я читаю об этом, тем больше запутываюсь. Если я делаю:

struct block{
    char data[32];
};
block blocks[2048];
std::string buffer;

buffer = "12345678123456781234567812345678";
strcpy(blocks[0].data, buffer.c_str());

я получаю ошибку, потому что добавление нулевого терминатора с помощью c_str() делает длину строки 33. Если я вычитаю один символ из строки, это работает, но тогда у меня появляется нулевой терминатор, который мне не нужен. Я могу успешно сделать следующее:

strcpy(blocks[0].data, "12345678123456781234567812345678");

но я хочу сначала сконструировать строку, поскольку часто приходится конкатенировать различные строки из разных массивов. Например, я могу сделать это с помощью std::string:

std::string buffer = stringArray1[0] + stringArray2[0];
strcpy(blocks[0].data, buffer.c_str());

но тогда у меня снова будет нулевой терминатор. Я бы хотел просто скопировать именно символы в std::string без нулевого терминатора.

Я использую VC++ 6.0.

7
задан Geo Ego 1 December 2011 в 17:28
поделиться