gpt4 book ai didi

c++ - String 对象和以 null 结尾的字符数组之间的区别

转载 作者:行者123 更新时间:2023-11-28 00:07:40 27 4
gpt4 key购买 nike

我正在使用 Arduino。

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

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

我希望这个问题能在像 Arduino 这样的嵌入式系统的背景下得到回答。

最佳答案

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

  1. 它可以处理嵌入了NUL字节的字符串('\0')
  2. 计算长度是常数时间(它是一个存储值,不是从头扫描NUL得到的)
  3. 它使用过度分配策略,因此重复就地连接的成本更低;它并没有准确地分配串联所需的内容,而是分配了更多(取决于实现),因此一堆小的串联不会最终为每个串联重新分配
  4. 它还为您管理大量分配任务,从而更容易避免缓冲区溢出(普通 char 数组要么是固定大小,要么您手动管理动态分配的内存;无论哪种方式,都有溢出的风险或内存泄漏上升)

主要缺点是存储始终是动态分配的(堆栈本地字符数组可以减少内存碎片并提高缓存一致性),并且您始终存储长度引擎盖下 String 的容量,所以你要支付(取决于处理器的指针大小和类型的精确保证)12-24 字节的固定开销,超出了普通的开销char 的堆栈数组将涉及;如果你有很多非常小的 String 和有限的内存,那可能会伤害你一点(尽管对于其中的很多,即使是 char 数组你也是可能是动态分配,所以你仍然需要支付指针和分配器开销,而不是 lengthcapacity 开销。

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

关于c++ - String 对象和以 null 结尾的字符数组之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34603609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com