あなたが行った構造を考えると、これは正しいです
testMsg_t * pInput =(testMsg_t *)malloc(sizeof(testMsg_t));
*arr[dimension]
ただし、おそらく、文字へのポインタの配列の長さの次元である-行間を読み取る-の意味に混乱しているでしょう。
MAC_ADDR_STR_LEN
おそらくMacアドレスの文字列表現の長さ(たとえば<20バイト?)
ただし、構造体は20個のcharポインターを提供し、有効なメモリーを指すように文字ポインターを初期化する必要があります。
testMsg_t *pInput = (testMsg_t *) malloc(sizeof(testMsg_t) );
pInput->macsStrList[0] = (char *) malloc( MAC_ADDR_STR_LEN+1 );
pInput->macsStrList[1] = (char *) malloc( MAC_ADDR_STR_LEN+1 );
pInput->macsStrList[2] = (char *) malloc( MAC_ADDR_STR_LEN+1 );
...
または構造体を再定義して
typedef struct testMsg_ {
unsigned char opCode;
unsigned int Count;
char macsStrList[NUMBER_OF_MAC_ADDRESSES][MAC_ADDR_STR_LEN];
} testMsg_t;
複数の割り当てを処理する必要がないようにするため。
追加;
コメントによると、MACアドレスの数は動的に決定されるため、構造体を次のように定義することもできます。
typedef struct testMsg_ {
unsigned char opCode;
unsigned int Count;
char macsStrList[1][MAC_ADDR_STR_LEN];
} testMsg_t;
次に、を使用して割り当てます
testMsg_t *pInput = (testMsg_t *) malloc(sizeof(testMsg_t) + (countOfMacsAddresses * MAC_ADDR_STR_LEN) );
realloc
これにより、必要に応じて配列のサイズを動的に変更するために使用できるポインターを使用したソリューションが追加されます。