关于微控制器,这两句话是否正确?
1. const char* longString1 = "Foo1";
在这种情况下,字符串将存储在内存中的data
区域中
2. char* longString2 = "Foo2";
在这种情况下,字符串将放在内存中的text\code
区域中。
如果平台是以下微控制器,在哪里以及哪个是存储字符串的最佳方式:
1. PIC?
2. ARM(更具体地说,基于ARM Cortex-M4F的MCU TM4C123G)?
答案 0 :(得分:0)
最好的方法是const char*
传达指针可以指向其他东西但它所指向的东西是常量的想法(字符串文字预计不会被标准修改。标准说它是尝试这样做的未定义行为。) - 无法修改。第二个会产生警告。这是一个你将保持开放的风险。
另外主要的是 - 这些通常保留在只读部分,但可能会有所不同,因为标准除了修改它们之外没有任何约束是未定义的行为。如何实现这一点是实施者的一个重大选择。人们也可以这样做 - 保留文字的内存不是只读的,但修改它们会调用依赖于该平台的行为。
这些陈述是真的吗?是一个有很多事情要指明的问题。您正在运行的平台 那里有什么样的架构。
文字字符串不是const char[]
数组,而只是被禁止覆盖的char[]
数组。您可以实现该行为,而无需将它们存储在只读存储器中。但是根据声明隔离存储位置的声明是复杂的设计 - 相反,最好将它保存在同一个内存中,而不管相同字符串文字的声明(在大多数情况下就是这种情况)。