【发布时间】:2013-03-25 16:34:31
【问题描述】:
我有这个问题,我有一个字符串,我将它作为字符指针传递给函数。
void test(char * str) {
....
}
其中 str = "abc"。现在我想在这个字符串的末尾添加一些额外的字符而不创建新字符串。我不想使用 strcat,因为我不知道要在字符串末尾添加多少个字符以及要添加什么。我试图使用 realloc 但它不起作用,因为 str 是在堆栈上分配的。
有什么方法可以动态增加 char 数组的大小?
更新: 在我的采访中,有人问了我一个与此有关的问题。我被要求在不使用额外空间的情况下这样做。因此,如果我使用 malloc 分配内存,我在技术上会使用额外的空间,对吗?
谢谢
【问题讨论】:
-
void test(char ** str){…; *str = realloc(...); assert(*str);} -
@Eddy_Em 像这样使用 realloc 是危险的。始终先使用临时变量,然后再将其复制进去。此外,如果传入由 alloca 创建的指针或字符数组,会发生什么情况,就像 OP 似乎要求的那样?
-
@Eddy_Em 不,您使用临时变量来确保 realloc 在重新分配参数中传递的引用之前成功。
-
@Fox,如果你想要 C++ 的解决方案,你应该使用
std::string容器而不是字符数组。 -
所以,面试官问你“附加到堆栈上分配的字符串,给定 that 函数签名?”要么他们只是想拒绝你,要么他们希望你告诉他们他们疯了。即使您使用额外的内存,该函数原型也永远无法工作。
标签: c++ string pointers string-concatenation