当前位置:  开发笔记 > 编程语言 > 正文

char*/字符串连接没有复制?

如何解决《char*/字符串连接没有复制?》经验,为你挑选了1个好方法。

我想在没有新的内存分配和复制的情况下在C或C++中连接2个字符串.可能吗?

可能的C代码:

char* str1 = (char*)malloc(100);
char* str2 = (char*)malloc(50);
char* str3 = /* some code that concatenates these 2 strings
                without copying to occupy a continuous memory region */

然后,当我不再需要它们时,我只是这样做:

free(str1);
free(str2);

或者如果可能的话,我想在C++中实现相同的功能,使用std::string或者可能char*,但是在str3上使用newdelete(可能是void operator delete ( void* ptr, std::size_t sz )运算符(C++ 14)).

关于字符串连接有很多问题,但我没有找到一个问相同的问题.



1> Anders..:

不,这是不可能的

在C中,malloc操作返回彼此没有关系的内存块.但在C语言中,字符串必须是连续的字节数组.所以没有复制就无法扩展str1,更不用说连接了.

对于C++,也许可能会对绳索感兴趣:请参阅此答案.

绳索分配在不必连续的块中.这支持O(1)连接.但是,访问器使它显示为单个字节串.我确定将绳索转换回std :: string或C风格的字符串会占用一个副本,但这可能是最接近你想要的.

此外,担心复制几个字符串的成本可能是一个不成熟的优化.除非您要移动大量数据,否则无关紧要


@Olaf - 你读过我的回答:我说"不,这是不可能的",听起来像是对我的回答?不要粗鲁.
推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有