为c++字符数组分配额外的内存
Allocate extra memory to the character array C++
我有这个问题,我有一个字符串,我把它作为一个字符指针传递给函数。
void test(char * str) {
....
}
where STR = "abc"。现在我想在这个字符串的末尾添加一些额外的字符,而不创建一个新字符串。我不想使用strcat,因为我不知道我在字符串的末尾添加了多少个字符,也不知道我在添加什么。我试图使用realloc,但它不工作,因为str是在堆栈上分配的。
是否有任何方法可以动态地增加字符数组的大小?
更新:在我的面试中,有人问了我一个与此有关的问题。我被要求在不占用额外空间的情况下完成。所以如果我用malloc分配内存技术上来说我使用了额外的空间,对吧?
谢谢
不能,特别是当字符串是在堆栈上分配的时候。堆栈空间在编译时是固定的。您必须首先分配更多的空间,或者分配一个具有更多空间和strcpy
的新数组。
如果你正在使用c++ -那么坚持使用std::string
,忘记char *
的整个交易。
但是,如果您希望将char *
用于字符串,那么从一个字符串分配一个新的字符数组和strcpy()
到另一个字符串。不要忘记释放原始的char *
内存,以避免内存泄漏。
在我的面试中,有人问了我一个与此有关的问题。我被要求在不占用额外空间的情况下完成。所以如果我用malloc分配内存技术上来说我使用了额外的空间,对吧?
如何在不增加额外空间的情况下增加字符串的长度?
您必须将旧字符串delete
,并使用new
分配您想要的长度的新字符串
对不起,不行。不能调整动态变量/数组的大小。问题是,另一个变量,甚至另一个调用帧可能紧跟在有问题的变量之后。由于代码中可能有指向这些对象的指针,因此不能移动这些对象来腾出空间。
void test(string &str) {
....
str += "wibble";
}
似乎适用于c++
不使用realloc(不是在堆栈上完成)或strcpy(使用额外的缓冲区空间),您可以将字节中的新值存储在输入字符串之后。在下面的简单示例中,我以"abcd"开头,并在函数fn的末尾添加三个z。
void fn(char *str)
{
int len = strlen(str);
memset(str+len, 'z', 3);
str[len+3] = 0;
return;
}
int main()
{
char s[] = "abcd";
printf("%sn", s);
fn(s);
printf("%sn", s);
}
输出:abcd
zzz
这种方式可以扩展到在原字符串前面添加不同的字符串
- Win32编译器选项和内存分配
- 多个文件的内存分配错误"在抛出 'std :: bad_alloc' what (): std :: bad_alloc 的实例后终止调用" [C++]
- 当需要超过16GB的连续内存时,内存分配失败
- 尝试摆脱任何堆内存分配
- 以下代码执行哪种内存分配(动态或静态)?
- 开放 CV 中的动态内存分配,用于视频处理
- 为什么类和 main() 函数中也有动态内存分配
- 使用 NTAllocateVirtualMemory 和 GetProcAddress 的内存分配问题不起作用
- C++:矢量分配器行为、内存分配和智能指针
- 介于 [固定数组] 和 [带内存分配的指针] 之间的性能
- Linux C++ 中的页面对齐内存分配
- 整数内存分配/释放
- 将内存分配返回值强制转换为 TYPE 数组
- C++程序什么都不做,但瓦尔格林德显示内存分配
- 给定特定内存地址的数组的动态内存分配
- 如何完成内存分配
- 我刚刚了解了C++中的动态内存分配
- 在先前调用 string::find 后添加内存分配和内存集会导致它返回 npos.为什么?
- 对于堆上的页面对齐内存分配是否有任何优化或不同的 API?
- 无法删除布尔动态内存分配