String对象与以null结尾的字符数组之间的差异

时间:2016-01-05 03:11:43

标签: c++ string arduino

我正在使用Arduino。

对于文本操作,有两种方法。第一种方法是使用 以null字符结尾的字符数组。这是用C语言完成的。另一种方法是使用用C ++编写的String对象。

两种方法有什么区别?使用String对象与char数组有什么优缺点?

我希望在像Arduino这样的嵌入式系统的环境中回答这个问题。

1 个答案:

答案 0 :(得分:3)

与C ++的std::string一样,Arduino String有几个优点:

  1. 它可以处理嵌入了NUL字节('\0'
  2. 的字符串
  3. 计算长度是恒定时间(它是一个存储值,不是从一开始就扫描NUL得出的)
  4. 它使用了一种过度策略,因此重复的就地连接更便宜;它不是精确地分配串联所需的内容,而是分配更多(依赖于实现),因此一堆小的连接不会为每个连接重新分配
  5. 它还为您管理了许多分配任务,使得更容易避免缓冲区溢出(其中普通字符数组是固定大小,或者您手动管理动态分配的内存;无论哪种方式,风险溢出或内存泄漏上升)
  6. 主要的缺点是存储总是动态分配(堆栈本地字符数组可以减少内存碎片并提高缓存一致性),并且您始终存储length和{{1}引擎盖下的capacity,所以你需要支付(取决于处理器的指针大小和类型的精确保证)12-24字节的固定开销超出了{{的普通堆栈数组1}}将涉及;如果你有很多非常小的String和有限的内存,这可能会伤害你(虽然对于很多人来说,即使使用char数组,你也可能是动态的分配,所以你仍然支付指针和分配器开销,而不是Stringchar开销。

    基本上,you use String for the same reasons you use std::string in normal C++.