存储字符串:char *与const char *

时间:2018-02-12 10:14:11

标签: c embedded

关于微控制器,这两句话是否正确? 1. const char* longString1 = "Foo1";
在这种情况下,字符串将存储在内存中的data区域中 2. char* longString2 = "Foo2";
在这种情况下,字符串将放在内存中的text\code区域中。

如果平台是以下微控制器,在哪里以及哪个是存储字符串的最佳方式:
1. PIC?
2. ARM(更具体地说,基于ARM Cortex-M4F的MCU TM4C123G)?

1 个答案:

答案 0 :(得分:0)

最好的方法是const char*传达指针可以指向其他东西但它所指向的东西是常量的想法(字符串文字预计不会被标准修改。标准说它是尝试这样做的未定义行为。) - 无法修改。第二个会产生警告。这是一个你将保持开放的风险。

另外主要的是 - 这些通常保留在只读部分,但可能会有所不同,因为标准除了修改它们之外没有任何约束是未定义的行为。如何实现这一点是实施者的一个重大选择。人们也可以这样做 - 保留文字的内存不是只读的,但修改它们会调用依赖于该平台的行为。

这些陈述是真的吗?是一个有很多事情要指明的问题。您正在运行的平台 那里有什么样的架构。

文字字符串不是const char[]数组,而只是被禁止覆盖的char[]数组。您可以实现该行为,而无需将它们存储在只读存储器中。但是根据声明隔离存储位置的声明是复杂的设计 - 相反,最好将它保存在同一个内存中,而不管相同字符串文字的声明(在大多数情况下就是这种情况)。