关于 C 中的 ARM-GCC 当定义常量字符串数组并直接访问它时,字符串会正确放置在 .rodata 部分中。
但是,如果我有一个结构体,其指针指向放置在 .data 部分中的字符串数组并使用 ram。如何将 myStrings 放入只读部分并保存内存?
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]);
}
}
编辑:提供了最少的代码。
最佳答案
正如@Dmitri 指出的,只有指向字符串的指针存储在 ram 中。这也可以通过将它们声明为常量来避免
const char * const myStrings2[] = {"String3", "String4"};
typdef struct {
const char * const * strings;
int a;
} mystruct_t;
关于c - arm gcc const 字符串数组未放置在rodata 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43419985/