在C++中,有一种方法可以从不同的内存位置打印char*
In C++ is there a way to print char* from different memory locations?
我不确定这个问题是否太有意义,所以我将尝试展示一个例子:
想象一下,我在内存位置&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
,即s
和z
的级联,以及另一个字符串v
,即s
和y
的级联,而不必复制s
?
我知道它的阅读速度不会很快,但它肯定会节省更多的内存,尤其是在预期的重复次数下。由于s
的值可能与z
和y
分开变化,并且变化应该出现在z
和v
中,因此如果可能的话,不克隆s
肯定会更有效。
您想要的(或者我认为您想要的)结构的标准名称是一个rope——它就像一个具有统一接口的字符串的复合序列。
关于绳索的另一个问题对它们进行了一些讨论,并链接到SGI扩展。
如果您选择了一个现有的实现,请检查子字符串的可变性是否符合您的要求——有些子字符串可能会实现写时复制。
没有标准的方法来做你想做的事。您必须创建自己的类来表示这样的字符串。也许它会包含类似vector<pair<char*, size_t>>
的内容来表示字符串所包含的数据块。
您的问题的标题意味着您希望打印此串联字符串。如果这是唯一的用例,那么您可以使用writev
和iovec
。其概念是,您可以在一个命令中从多个数据源批量写入文件描述符。只需使用writev
并写入stdout
即可。
相关文章:
- <char> 使用 Vulkan 映射内存时如何使用 std::vector 而不是 void**?
- 为什么为char指针分配内存不会截断char序列
- 内存浪费?如果main()应该只返回0或1,那么为什么main是用int而不是短int甚至char声明的
- 让 'std::vector<unsigned char>' 从 'std::string' 中窃取内存
- 如何用char*修复此内存泄漏
- 如何为const char double指针(使用新的)动态分配内存
- char*在结构内存分配中
- 当您声明指向char数组的指针时,存储在内存中
- C++将结构强制转换为 std::矢量<char>内存对齐
- 是否可以让 std::vector<char> 使用选定的内存对齐方式分配内存
- char中的内存[]
- C :占用更多内存,将单个字符作为char或字符串存储
- 如何在 C++ 中安全地为 char *array 重新分配内存(它适用于自定义字符串类)
- 如何将常量字符* []隐藏到单个内存块,例如char* ptr
- 如何将足够的数据从文本文件分配到char*中,然后将其复制到内存C 中
- Windows 10中的Char*的内存分配问题
- 创建 char 数组会导致内存为静态
- 动态分配正确对齐的内存:char数组上的新表达式是否合适
- 增强共享内存:char *的向量
- c++如何释放内存*char