代码之家  ›  专栏  ›  技术社区  ›  guagay_wk

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

  •  0
  • guagay_wk  · 技术社区  · 10 年前

    我正在使用Arduino。

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

    这两种方法有什么区别?使用String对象与使用char数组有什么利弊?

    我希望这个问题能在像Arduino这样的嵌入式系统中得到解答。

    1 回复  |  直到 10 年前
        1
  •  3
  •   Community Mohan Dere    9 年前

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

    1. 它可以处理嵌入 NUL 字节( '\0' )
    2. 计算长度是恒定时间(它是一个存储值,不是通过扫描 无 从一开始)
    3. 它使用过度分配策略,因此重复就地连接更便宜;它没有精确地分配连接所需的内容,而是分配了一点(取决于实现),这样一堆小连接就不会为每个连接重新分配
    4. 它还为您管理许多分配任务,从而更容易避免缓冲区溢出(如果纯字符数组不是固定大小,就是手动管理动态分配的内存;无论哪种方式,溢出或内存泄漏的风险都会增加)

    主要缺点是存储总是动态分配的(堆栈本地字符数组可以减少内存碎片并提高缓存一致性) length 和 capacity 的 一串 在引擎盖下,因此您需要支付12-24字节的固定开销(取决于处理器的指针大小和类型的精确保证) char 将涉及;如果你有很多非常小的 一串 s和有限的记忆力,这可能会伤害你(尽管对很多人来说,即使 烧焦 数组可能是动态分配的,因此仍然需要支付指针和分配器的开销,而不是 长 和 容量 开销)。

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