gpt4 book ai didi

c++ - char* 和 char** 的问题 (C --> C++)

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:14:20 25 4
gpt4 key购买 nike

好的,我正在尝试将一些 C 代码集成到 C++ 项目中,但遇到了一些问题。我将在这里详细介绍第一个。

我一直遇到这个错误:

错误:无法在赋值中将'char*'转换为'char**'|

这是有问题的代码(标有断点):

char** space_getFactionPlanet( int *nplanets, int *factions, int nfactions )
{
int i,j,k;
Planet* planet;
char **tmp;
int ntmp;
int mtmp;

ntmp = 0;
mtmp = CHUNK_SIZE;
tmp = malloc(sizeof(char*) * mtmp); <--- Breakpt

malloc 函数派生自 C 头文件。这是声明:

_CRTIMP void* __cdecl __MINGW_NOTHROW    malloc    (size_t) __MINGW_ATTRIB_MALLOC;

我正在使用设置为使用 MinGW 的代码块。上面的语法对我来说完全陌生。

我完全被难住了,因为这段代码在我从中提取的 C 程序中运行良好。

有什么想法吗?

编辑 1:

糟糕,刚刚意识到声明来自 stdlib.h。

编辑 2:

我试过:

tmp = static_cast<char **>(malloc(sizeof(char*) * mtmp));

如建议的那样,但我没有得到错误:从类型“char*”到类型“char**”的无效 static_cast。

编辑 3:

好的,reinterpret_cast 有效,但替换 mallocs 的解决方案似乎更加简单,所以我将采用它。

但是,函数末尾没有free(tmp)。如果我不放入 delete tmp[],这是个问题吗?

编辑 4:我应该补充一点,tmp 是由函数返回的,因此删除 tmp 是必要的,还是这是自动的?

好的,我将此标记为已解决。感谢您的帮助。

最佳答案

C++ 在指针类型转换方面并不是那么自由。你将不得不做这样的事情:

tmp = static_cast<char **>(malloc(sizeof(char *) * mtmp));

如果您的 malloc() 返回一个 void*,这将起作用。但是,您得到的错误表明您的 malloc() 被声明为返回 char*,在这种情况下您必须使用 reinterpret_cast 改为:

tmp = reinterpret_cast<char **>(malloc(sizeof(char *) * mtmp));

这会将 malloc() 的返回类型转换为适合分配给 tmp 的类型。您可以在 Type Casting 阅读更多关于 C++ 中不同类型转换的信息。 .

请注意,如果此代码仍必须在 C 中编译,您可以改用 C 风格的转换:

tmp = (char **)malloc(sizeof(char *) * mtmp);

关于c++ - char* 和 char** 的问题 (C --> C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3869078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com