我试图摆脱一些编译器警告说strcpy,sprintf等是不安全的.我明白他们为什么不安全,但我想不出一个以C++风格修复代码的好方法.
这是代码的摘录:
extList->names[i]=(char *)malloc(length*sizeof(char));
strcpy(extList->names[i],extName); // unsafe
// strncpy(extList->names[i],extName,length); // also unsafe
Run Code Online (Sandbox Code Playgroud)
这是消息:
C4996:'strcpy':此函数或变量可能不安全.请考虑使用strcpy_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.
在不知道要复制的东西的长度的情况下,我想不出用C++复制数据的安全方法.我知道有strlen(),但这也是不安全的,因为它假定(可能不正确)数据是以空值终止的.
也:
// used to concatenate:
sprintf(extStr,"%s%s",platExtStr,glExtStr);
Run Code Online (Sandbox Code Playgroud)
C4996:'sprintf':此函数或变量可能不安全.请考虑使用sprintf_s.要禁用弃用,请使用_CRT_SECURE_NO_WARNINGS.详细信息请参见在线帮助.
使用std :: string来连接很容易,但是我需要以某种方式将数据输入extStr(而不是使用strcpy,lol).string :: c_str()函数返回一个指向不可修改数据的指针,所以我不能只设置extStr等于它.(我甚至不确定c_str()指针是否需要稍后调用它?是否使用"new"分配空间?)
关于这个东西的任何建议?这是10,000行文件的一部分,而不是我的......所以我并不热衷于用C++方式重写这个东西.