gpt4 book ai didi

c++ - 警告 : deprecated conversion from string constant to 'char*' '

转载 作者:IT老高 更新时间:2023-10-28 22:13:39 24 4
gpt4 key购买 nike

Possible Duplicate:
How to get rid of deprecated conversion from string constant to ‘char*’ warnings in GCC?

我使用库中的以下函数,但我无法更改:

HRESULT DynamicTag(char * pDesc, int * const pTag ); 

我使用它如下。我已经创建了实现上述功能的库提供的类的对象。

int tag =0;
g_pCallback->DynamicTag("MyLogger", &tag);

我收到以下警告:

warning: deprecated conversion from string constant to 'char*'

摆脱上述警告的最佳方法是什么?我不想动态分配内存。

信息:我正在使用 Vxworks6.8 编译器

最佳答案

处理未知库

当传递文字而不是其他 const 字符串时,并且您不确定库是否正在修改字符串,很容易在 C++ 中创建一个堆栈分配的文字临时拷贝(受 How to get rid of `deprecated conversion from string constant to ‘char*’` warnings in GCC? 启发):

char strMyLogger[]="MyLogger";
g_pCallback->DynamicTag(strMyLogger, &tag);

使用显式转换来解决弱库原型(prototype)

在大多数编译器上,显式转换会避免警告,例如:

 g_pCallback->DynamicTag(const_cast<char *>("MyLogger"), &tag);

注意:只有当你确定函数确实从不修改传递的字符串时(即函数可以声明为 const char *,但事实并非如此,可能是因为库编写者忘记添加它)。尝试修改字符串文字是一种未定义的行为,并且在许多平台上会导致崩溃。如果您不确定,则需要制作字符串的可写拷贝,当您知道字符串大小的某个上限时,该拷贝可能是动态分配的,甚至是堆栈分配的。

关于c++ - 警告 : deprecated conversion from string constant to 'char*' ',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7468286/

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