arm gcc const string array不放在rodata中

时间:2017-04-14 22:23:10

标签: c gcc arm

在C中的ARM-GCC 在定义一个const字符串数组并直接访问它时,字符串被正确地放在.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]);
    }
}

编辑:提供最少的代码。

1 个答案:

答案 0 :(得分:1)

正如@Dmitri指出的那样,只有指向字符串的指针存储在ram中。这可以通过将它们声明为常量来避免

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

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