2012-05-04 139 views
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 

還有什麼想法?

+0

@ MahmoudAl-Qudsi我不明白。我沒有在結構中聲明它嗎? – mriksman

+0

我錯過了stmenubar是你未命名的結構的事實。 –

回答

3

string_table是指向字符串的指針數組。一個數組可以衰減到(一維的,因爲這是唯一的)指針就好了。

因此,一個字符串數組的數組可以表示爲一個指針[think:array] to(指針chars [think:strings])。

const char **pcStringTable = string_table; 

然後你就可以像任何其他一維數組訪問:

printf("%s", pcStringTable[2]); 
+2

OPs示例中的代碼不是一個二維數組,它是一個指針數組,它可以衰減爲指針指針。當你將一個指針指向一個指針時,你最終會得到一個指針。 – Lundin

+0

我的不好。寒冷的答覆。 –

+0

已更改。謝謝。 –