2

私は次のものを持っています。

const CHAR string_1[] PROGMEM = "String 1";
const CHAR string_2[] PROGMEM = "String 2";
const CHAR string_3[] PROGMEM = "String 3";
const CHAR string_4[] PROGMEM = "String 4";
const CHAR string_5[] PROGMEM = "String 5";

const CHAR *string_table[] PROGMEM  = 
{
    string_1,
    string_2,
    string_3,
    string_4,
    string_5
};

この string_table のアドレスを保存して、関数で呼び出すことができるようにするにはどうすればよいですか。

CHAR acBuffer[20];
UCHAR ucSelectedString = 2; // get string number 3
//
    pcStringTable = string_table ...?? What is the proper line here??
//
strcpy_P(acBuffer, (char*)pgm_read_byte(&(pcStringTable[ucSelectedString])))

以下のコメントに基づいて、構造も変更しました。

typedef struct
{
...
CHAR **pasOptions;

次に、それに割り当てようとしstring_tableました。

stMenuBar.pasOptions = string_table;

コンパイラはこの警告をスローします。

warning: assignment from incompatible pointer type

これ以上の考えはありますか?

4

1 に答える 1

3

string_table文字列へのポインタの配列です。配列は、(1 次元、それが唯一の種類であるため) ポインターにうまく減衰できます。

したがって、文字列の配列への配列は、ポインタ [考え: 配列] から (文字のポインタ [考え: 文字列]) として表すことができます。

const char **pcStringTable = string_table;

その後、他の 1 次元配列としてアクセスできます。

printf("%s", pcStringTable[2]);
于 2012-05-04T06:08:51.743 に答える