gpt4 book ai didi

c++ - char[] (c lang) 到字符串 (c++ lang) 的转换

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:59 26 4
gpt4 key购买 nike

我看现在几乎所有的API都是用C语言开发的。原因有:处理速度、低级语言、跨平台等等。

如今,我使用 C++ 编程是因为它的面向对象、字符串的使用、STL,但主要是因为它是更好的 C。

然而,当我的 C++ 程序需要与 C API 交互时,当我需要将 char[] 类型转换为 C++ 字符串,然后使用其强大的方法对这些字符串进行操作,最后将这些字符串转换为 char[ ](因为 API 需要接收 char[])。

如果我对数百万条记录重复这些操作,由于转换任务,处理时间会更长。出于这个简单的原因,我觉得 char[] 是目前假设 C++ 是更好的 c 的障碍。

我想知道您是否有同感,如果不是(我希望如此!)我真的很想知道哪种是 C++ 与 char[] 类型共存的最佳方式,而无需进行那些糟糕的转换。感谢您的关注。

最佳答案

C++ 字符串类有很多问题,是的,你所描述的就是其中之一。

更具体地说,如果不创建字符串的拷贝,就无法进行字符串处理,这可能很昂贵。

而且因为几乎所有的字符串处理算法都是作为类成员实现的,所以它们只能用在字符串类上。

您可能想要尝试的解决方案是结合使用 Boost.Range 和 Boost.StringAlgo。

Range 允许您从一对迭代器中创建序列。他们不拥有数据的所有权,所以他们不复制字符串。它们只是指向您的 char* 字符串的开头和结尾。

并且 Boost.StringAlgo 将所有常见的字符串操作实现为非成员函数,可以应用于任何字符序列。例如,Boost 系列。

这两个库的结合几乎可以解决问题。它们让您不必复制字符串来处理它们。

另一个解决方案可能是将您的字符串数据存储为 std::string一直。当您需要将 char* 传递给某个 API 函数时,只需将第一个字符的地址传递给它即可。 (&str[0]).

第二种方法的问题是 std::string 不能保证它的字符串缓冲区是空终止的,所以你要么必须依赖实现细节,要么手动添加一个空字节作为 字符串。

关于c++ - char[] (c lang) 到字符串 (c++ lang) 的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1247493/

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