1

私の基本的なタスクは、バッファ配列のサブセットを別のバッファ配列に入れることです。

char buffer[max_len];

unit8 *pDestBuffer;

ANSI-Cにとどまりたいので、このコードを使用しました。

memcpy(pDestBuffer, buffer, 4);

ただし、期待どおりの結果が得られないため、何かが間違っている必要があります。なぜなら、バッファをデバッグすると、配列のすべてのスロットが表示されるためです。これをpDestBufferで実行すると、1つのアイテムしか取得できませんが、次のように変更できます。memset(pDestBuffer,1,4)

pDestBufferは構造体の一部であり、上記の定義以外に、pDestBufferへの唯一の他の参照は次の行でした。

requiredMemory = sizeof(Structure) + bufferSize;
pStructure = (Structure *)HostMalloc(requiredMemory);
pStructure->pDestBuffer = ((uint8 *)pStructure)+sizeof(Sturcture);

これはかなり基本的な作業かもしれません。私はこれに自分で取り組んでいますが、これに対する「ベストプラクティス」がある場合、または解決策を知っている場合は、それを私と共有してください。

ひねりとして、他の問題のためにとにかく使用するブーストライブラリを使用して、これを改善する方法があるかどうかを本当に知りたいと思います。

4

3 に答える 3

4

コードは機能しています。デバッガーがデータを認識できないからといって、データが存在しないことを意味するわけではありません。何が起こっているのかというと、コードが言うuint8_t * pDestbuffer;ので、デバッガーはpDestBufferが1バイトへの単なるポインターであると見なし、それが表示されます。ただし、実際には配列へのポインタであることはご存知でしょう。

すべてのデータを表示できるように、これが配列であることをデバッガーに通知する方法があるかもしれません。たとえば、私が知っている1つのデバッガーでは、1pStructure->pDestBuffer,4バイトだけでなく4バイトを表示するように入力できます。

于 2012-10-23T15:36:26.993 に答える
2

「ベストプラクティス」は、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};
于 2012-10-23T15:38:11.593 に答える
1

BoostライブラリはC++です。これはCまたはC++ですか?

タイトルにCと書いてあり、コードはCですが、C ++は実際には異なる言語であり、異なる文体を持っています。

「すべてのスロットを見る」とはどういう意味ですか?Microsoft IDEを参照している場合、おそらくユニット8 *と呼ばれるものuint8_t *はポインターであり、nullで終了する文字列として解釈される可能性がありますが、(その符号のために)単なるポインターである可能性が高く、それが何であるかを示します。配列の先頭ではなく、を指します。

于 2012-10-23T15:39:17.247 に答える