Qt: memcpy failed .. Как скопировать? - PullRequest
0 голосов
/ 17 июня 2020

Сегодня у меня вопрос о Qt и функции memcpy (). Я получил QByteArray i_byte_array , содержащий мои необработанные данные, которые мне нужны. Первое, что я попробовал, - скопировать эти данные в char * l_array . Это дает мне:

void blablafunctionblabla(const QByteArray& i_byte_array)
{
   char* l_array = (char*)malloc(i_byte_array.size());
   memcpy(l_array, i_byte_array, i_byte_array.size());
   // OR: char* l_array = i_byte_array.data(); // same result
}

Когда я запускаю код, я ожидал скопировать все содержимое i_byte_array , которое: значения i_byte_array

В результате я получаю только это ...: l_array value

Кажется, копирование остановилось на первом / 0 , игнорируя размер, который я прошу его скопировать. .

Итак, мой вопрос: почему это происходит с функцией memcpy? И как мне продолжить, чтобы скопировать все необработанные данные? (даже / 0, что является для меня полезными данными)

1 Ответ

0 голосов
/ 19 июня 2020

На самом деле memcpy не игнорирует нулевой символ. Я предполагаю, что IDE (возможно, Qt Creator) игнорирует нулевой символ, поэтому вы не можете видеть все содержимое строки char.

Если вы импортируете l_array в QByteArray следующим образом:

QByteArray ba = QByteArray::fromRawData(l_array, i_byte_array.size());

Вы увидите, что содержимое ba такое же, как i_byte_array.

Вы можете проверить вопрос SO для memcpy: Как я могу скопировать данные, которые содержат символ '\ 0' .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...