Realloc 堆栈分配的字符 (*)[n]

realloc stack allocated char (*)[n]

提问人:glades 提问时间:8/12/2021 最后编辑:glades 更新时间:8/12/2021 访问量:31

问:

我有一个函数可以像这样进行一些重新分配:

void str_replace(char** str, const char* a, const char* b)
{
    *str = realloc(*str, 100);
}

我主要使用以下命令调用该函数:

char test[] = "some test string";
str_replace(&test, "test", "tested");

但是 gcc 抛出了一个警告:

../main/app_main.c: In function 'app_main':
../main/app_main.c:567:17: warning: passing argument 1 of 'str_replace' from incompatible pointer type [-Wincompatible-pointer-types]
     str_replace(&test, "test", "tested");
                 ^~~~~
../main/app_main.c:186:30: note: expected 'char **' but argument is of type 'char (*)[17]'
 esp_err_t str_replace(char **str_to_replace, const char *old, const char *new)

两个问题:

  • 如何将 char (*)[n] 类型的对象转换为 char**?
  • 我正在尝试重新分配堆栈分配的对象。这甚至被允许吗?
阵列 C99 Realloc 堆栈分配

评论

0赞 DaBler 8/12/2021
应该是 .也应该是.不能重新分配常量文本。应替换为 .**charchar **str_replacevoid str_replacechar test[] =char *test = malloc(...)
0赞 glades 8/12/2021
@DaBler:谢谢!我编辑了这个问题,因为前两个问题是我犯的错误。那么它必须动态分配吗?我以为即使是指向常数文字的指针也会衰减。
0赞 DaBler 8/12/2021
您可以将常量文本分配给 。但是,程序随后会崩溃,因为未分配常量文本,并且将此类指针传递给 是无效的。char *realloc(): invalid pointermalloc()free()

答: 暂无答案