16バイト値の16バイト配列、特に0x20(スペース文字)値を初期化したいと思います。
正しい方法は何ですか?
unsigned char a[16] = {0x20};
または
unsigned char a[16] = {"0x20"};
ありがとう
GNUと呼ばれる拡張 指定された初期化子 があります。これはgcc
でデフォルトで有効になっています
これにより、配列を次の形式で初期化できます
unsigned char a[16] = {[0 ... 15] = 0x20};
これを定義する、例えば
unsigned char a[16] = {0x20, 0x41, 0x42, };
最初の3つの要素を図のように初期化し、残りの要素を0
に初期化します。
あなたの第二の方法
unsigned char a[16] = {"0x20"};
4つの文字0x20
でヌル終了文字列を定義するだけで、コンパイラはそれを16進値として扱いません。
最初の方法は正しいですが、0x20,
を16回繰り返す必要があります。これを行うこともできます:
unsigned char a[16] = " ";
unsigned char a[16] = {0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20};
または
unsigned char a[16] = "\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20";
これがあなたが探していたものかどうかはわかりませんが、特定の配列のサイズが(頻繁に、または頻繁に)変更される場合は、メンテナンスを容易にするために、memset()
#include <string.h>
#define NUM_OF_CHARS 16
int main()
{
unsigned char a[NUM_OF_CHARS];
// initialization of the array a with 0x20 for any value of NUM_OF_CHARS
memset(a, 0x20, sizeof(a));
....
}
memset
を使用します。
何も入力する必要はなく、配列のサイズは初期化時に一度だけ提供されます。
#include <string.h>
int main(void)
{
unsigned char b[16];
memset(b, 0x20, sizeof(b));
}