0

実行時に値を変更したいサイズ 64 の unsigned char 配列がありますが、すべての試行が惨めに失敗しました。何が間違っていますか?

int main() {
  unsigned char buffer[64]={0xef,0xaa,0x03,0x05,0x05,0x06,0x07,0x08,......};
  buffer = {0x01,0x04,0xa0,0xb0,0xde,0x00,.....}; //fails

  return 0;
}

編集:配列バッファをゼロで埋めたくないので、新しい値を配置したい

4

8 に答える 8

9

もう 1 つの解決策は、全能memcpy()の C99 複合リテラルを使用することです。

memcpy(array, (int []){ 0x00, 0x01, 0x02 }, sizeof array);

信じられないかもしれませんが、これは機能します。

于 2013-08-15T19:11:44.383 に答える
4
    for (int i = 0; i < 64; ++i) buffer[i] = 0x00;

または C++ (11 以降) では、std::fill_n または std::generate_n を使用できます。

     std::fill_n(buffer, 64, 0x00);

また

      for (auto &b : buffer) b = 0x00;
于 2013-08-15T19:08:03.617 に答える
2

あなたのコメントから、配列の要素にアクセスしたくないことがわかります。そうでない場合は、問題に対する別の解決策があります。

メモリプールでバッファを宣言できます。したがって、

unsigned char *buffer = malloc( sizeof( unsigned char ) * 64 );

...そして、配列のすべての要素を置き換えたい場合 (配列の初期化構文を使用して実行しようとした場合)、次のように実行されます。

memset( buffer, 0x00, sizeof( unsigned char ) * 64 ); // To replace buffer = { 0x00, ..., 0x00 };.
memset( buffer, 0, sizeof( unsigned char ) * 64 ); // To replace buffer = '0...0';.

遺産:

スタックで宣言された配列を使用したい場合は、角括弧を使用して一度に 1 つの要素を変更する必要があります[ ]。それは次のように行われます。

for ( int i = 0; i < 64; i++ ) {
  buffer[ i ] = val; // where "val" is some value.
}
于 2013-08-15T19:07:09.203 に答える
1

要素の値は次の 2 つの方法で変更できます。

unsigned char buffer[64]={0xef,0xaa,0x03,0x05,0x05,0x06,0x07,0x08,......};

buffer[0] = 0;
buffer[1] = 15;
// etc ...

// C++11 for-loop range works fine to :
for ( auto &c : buffer )
    c = 0;

またはその後、 : memsetstd::fill_n:のような関数を使用できます。

memset( buffer, 0, sizeof(buffer) );
std::fill_n( buffer, 64, 0x00 );
于 2013-08-15T19:09:40.307 に答える
1

使用std::memset:

memset(buffer, 0, sizeof(buffer));

もありますがbzero、レガシー関数なので、新規開発では使用しないでください。

于 2013-08-15T19:08:57.763 に答える