在C++中,有一种方法可以从不同的内存位置打印char*

In C++ is there a way to print char* from different memory locations?

本文关键字:内存 char 打印 位置 方法 C++ 一种      更新时间:2023-10-16

我不确定这个问题是否太有意义,所以我将尝试展示一个例子:

想象一下,我在内存位置&s有一个字符串(非null终止),在内存位置z有另一个字符串。

char s[4]; s[0] = 'a'; s[1] = 'a'; s[2] = 'a'; s[3] = 'a';
char *z = malloc(sizeof(char) * 4);
z[0] = 'a'; z[1] = 'a'; z[2] = 'a'; z[3] = '';
char *y = malloc(sizeof(char) * 4);
y[0] = 'a'; y[1] = 'a'; y[2] = 'a'; y[3] = '';

有没有一种方法可以表示一个字符串u,即sz的级联,以及另一个字符串v,即sy的级联,而不必复制s

我知道它的阅读速度不会很快,但它肯定会节省更多的内存,尤其是在预期的重复次数下。由于s的值可能与zy分开变化,并且变化应该出现在zv中,因此如果可能的话,不克隆s肯定会更有效。

您想要的(或者我认为您想要的)结构的标准名称是一个rope——它就像一个具有统一接口的字符串的复合序列。

关于绳索的另一个问题对它们进行了一些讨论,并链接到SGI扩展。

如果您选择了一个现有的实现,请检查子字符串的可变性是否符合您的要求——有些子字符串可能会实现写时复制。

没有标准的方法来做你想做的事。您必须创建自己的类来表示这样的字符串。也许它会包含类似vector<pair<char*, size_t>>的内容来表示字符串所包含的数据块。

您的问题的标题意味着您希望打印此串联字符串。如果这是唯一的用例,那么您可以使用writeviovec。其概念是,您可以在一个命令中从多个数据源批量写入文件描述符。只需使用writev并写入stdout即可。