【问题标题】:store a string: char* vs. const char* [duplicate]存储字符串:char* 与 const char* [重复]
【发布时间】:2018-02-12 10:14:11
【问题描述】:

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

如果平台是以下微控制器,则存储字符串的最佳位置和方式是:
1. 图片?
2. ARM(更具体地说,ARM Cortex-M4F Based MCU TM4C123G)?

【问题讨论】:

  • C 没有指定datatext\code,写入字符串文字是未定义的行为。如果您想要答案,则需要提及您的平台、编译器和编译标志。

标签: c embedded


【解决方案1】:

最好的方法是const char*,它传达了指针可以指向其他东西但它指向的东西是常量的想法(字符串文字预计不会被标准修改。标准说它是未定义的行为试图这样做。) - 不能被修改。其次会产生警告。这是您将保持打开状态的风险。

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

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

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

【讨论】:

  • 问题是使用哪一个!!这已经解释过了,为什么会这样。
  • OP 显然是在一个平台上,该平台根据其声明将字符串文字存储在不同的位置。问题是这是否属实,以及什么是“最佳”存储位置。这个答案没有答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 2012-03-31
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多