Моя основная задача — получить подмножество буферного массива в другой буферный массив:
char buffer[max_len];
unit8 *pDestBuffer;
Я использовал этот код, потому что я хотел бы остаться в ANSI-C:
memcpy(pDestBuffer, buffer, 4);
Однако — что-то должно быть не так, потому что я не получаю свой результат, как я ожидаю. Потому что, когда я отлаживаю буфер, я вижу все игровые автоматы массива — когда я делаю это с pDestBuffer, я получаю только один элемент — который я могу изменить, однако, с чем-то вроде memset(pDestBuffer,1,4)
pDestBuffer является частью структуры, и единственной другой ссылкой на него, кроме определения выше, были следующие строки:
requiredMemory = sizeof(Structure) + bufferSize;
pStructure = (Structure *)HostMalloc(requiredMemory);
pStructure->pDestBuffer = ((uint8 *)pStructure)+sizeof(Sturcture);
Я знаю, что это может быть довольно простой задачей, и я сам над этим работаю, но, пожалуйста, если есть «лучшая практика» для этого или вы знаете решение, поделитесь им со мной.
Как поворот, я действительно хотел бы знать, если бы был улучшенный способ для этого, используя библиотеки повышения, которые я в любом случае использую для других проблем.
Ваш код работает. Тот факт, что ваш отладчик не может видеть данные, не означает, что их там нет. Происходит то, что ваш код говорит uint8_t * pDestbuffer;
поэтому ваш отладчик думает, что pDestBuffer — это просто указатель на один байт, вот что он показывает. Однако вы знаете, что это на самом деле указатель на массив.
Может быть какой-то способ сообщить отладчику, что это массив, чтобы вы могли видеть все данные. Например, один отладчик, которого я знаю, позволит вам ввести pStructure->pDestBuffer,4
сказать, покажи мне четыре байта, а не один.
Я думаю, что «лучшая практика» — не смешивать код C ++ и C.
#include <array>
#include <vector>
#include <algorithm>
std::array<char, len> buffer;
std::size_t n = 5;
std::vector<char> dest; // if n is dynamic
dest.reserve(n); // "performance"std::copy(begin(buffer), buffer + n, std::back_inserter(dest));
// or even shorter
std::vector<char> dest{begin(buffer), buffer + n};
буст библиотеки это C ++. Это C или C ++?
Вы говорите C в заголовке, и ваш код — C, но C ++ — это действительно другой язык, с другим стилем написания.
Что вы подразумеваете под «увидеть все слоты»? Если вы имеете в виду Microsoft IDE, то, что вы назвали unit8 *, что вы, вероятно, имеете в виду uint8_t *
или подобный, является указателем, и он может интерпретировать его как строку с нулевым символом в конце, но, скорее всего, просто указатель (из-за его знака) и показывает, на что он указывает, а не начало массива.