Possible Duplicate:
How to get rid ofdeprecated 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/