警告:当我在函数def中添加没有实际参数的形式参数时,从字符串常量到' char* '的转换已弃用

warning: deprecated conversion from string constant to ‘char*’ when i add a formal parameter in the function def but with no actual parameter

本文关键字:参数 字符串 常量 char 转换 函数 def 添加 警告      更新时间:2023-10-16

下面的代码在编译

时不会抛出任何警告
 #include <iostream>
 void GetHMACCode(unsigned char* buffer,long bufferLength,unsigned char** pResult,unsigned int &nResultLen){}
 unsigned char *pCRCBufferptr ;
 main() {
 unsigned char *pHMAC  = NULL;
 int ncrcDataLength;
 unsigned int nHMACLen = 0;
 GetHMACCode(pCRCBufferptr,ncrcDataLength,&pHMAC,nHMACLen);
 }

但是当我在函数中添加额外的参数(而不是在函数调用中)时,我得到下面的警告

myFile.cpp: In function ‘int main()’:
myFile.cpp:11: warning: deprecated conversion from string constant to ‘char*’

在函数

中添加了额外的参数
 #include <iostream>
 void GetHMACCode(unsigned char* buffer,long bufferLength,unsigned char** pResult,unsigned int &nResultLen,char *extra_arg = "11111111111111111111"){}
 unsigned char *pCRCBufferptr ;
 main() {
 unsigned char *pHMAC  = NULL;
 int ncrcDataLength;
 unsigned int nHMACLen = 0;
 GetHMACCode(pCRCBufferptr,ncrcDataLength,&pHMAC,nHMACLen);
 }

我很困惑为什么会抛出这个警告

谢谢光辉

该警告是关于将字符串字面值转换为非const char* (char* extra_arg = "...")。

将函数的定义更改为以下内容应该会使警告消失:

void GetHMACCode(unsigned char* buffer,long bufferLength,unsigned char** pResult,unsigned int &nResultLen, const char *extra_arg = "11111111111111111111"){}

添加const解决您的问题:

void GetHMACCode(unsigned char* buffer,
                 long bufferLength,
                 unsigned char** pResult,
                 unsigned int &nResultLen,
                 const char *extra_arg = "11111111111111111111") // const added here
{}