我有以下内容;
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
还有什么想法吗?
答案 0 :(得分:3)
string_table
是一个指向字符串的指针数组。一个数组可以衰减到(一维,因为这是唯一的一种)指针就好了。
因此,字符串数组的数组可以表示为指针[think:array] to(chars指针[think:strings])。
const char **pcStringTable = string_table;
然后您可以像任何其他一维数组一样访问:
printf("%s", pcStringTable[2]);