2017-04-14 10 views
0

在定義常量字符串數組並直接訪問它時,C 中的ARM-GCC上的字符串正確放置在.rodata節中。arm gcc常量字符串數組未放在rodata中

如果我有一個指向位於.data部分的字符串數組的指針並使用ram。如何將myStrings放入只讀部分並保存ram?

const char * myStrings[] = {"String1", "String2"}; //.rodata 
const char * myStrings2[] = {"String3", "String4"}; //.data 

typdef struct { 
const char ** strings; 
int a; 
} mystruct_t; 

const mystruct_t mystruct = {myStrings2,2}; 

void main() 
{ 
    for(uint8_t i=0;i<2;i++) 
    { 
     printf("%s",myStrings[i]); 
     printf("%s",mystruct.strings[i]); 
    } 
} 

編輯:提供最小代碼。

+0

它是字符串文字本身還是放置在.data中的指針數組? – Dmitri

+1

這不是有效的C代碼。閱讀[問]並提供[mcve]!請注意,指針不是數組。 – Olaf

+0

...你在'const mystruct_t = {myStrings,2}中缺少一個標識符;' – Dmitri

回答

1

作爲@Dmitri指出,只有指向字符串的指針存儲在ram中。這可以通過聲明它們不變以避免

const char * const myStrings2[] = {"String3", "String4"}; 

typdef struct { 
    const char * const * strings; 
    int a; 
} mystruct_t;