6 c++ warnings strcat strcat-s
当我尝试做这样的事情时:
char* prefix = "Sector_Data\\sector";
char* s_num = "0";
std::strcat(prefix, s_num);
std::strcat(prefix, "\\");
Run Code Online (Sandbox Code Playgroud)
等等,我收到警告
warning C4996: 'strcat': This function or variable may be unsafe. Consider using strcat_s instead.
Run Code Online (Sandbox Code Playgroud)
为什么strcat被认为是不安全的,有没有办法在不使用strcat_s的情况下摆脱这个警告?
另外,如果摆脱警告的唯一方法是使用strcat_s,它是如何工作的(语法方面:显然它不需要两个参数).
Eva*_*ran 29
如果你正在使用c ++,为什么不避免整个混乱和使用std::string.没有任何错误的相同示例将如下所示:
std::string prefix = "Sector_Data\\sector";
prefix += "0";
prefix += "\\"
Run Code Online (Sandbox Code Playgroud)
无需担心缓冲区大小和所有这些问题.如果你有一个需要a的API const char *,你可以使用该.c_str()成员;
some_c_api(prefix.c_str());
Run Code Online (Sandbox Code Playgroud)
Dre*_*ins 27
因为缓冲区前缀的空间可能比复制到它的空间少,导致缓冲区溢出.因此,黑客可以传入一个特制的字符串,该字符串会覆盖返回地址或其他关键内存,并开始在程序的上下文中执行代码.
strcat_s通过强制你传入复制字符串的缓冲区的长度来解决这个问题.如果需要,它将截断字符串以确保缓冲区不会溢出.
谷歌strcat_s准确地看到如何使用它.
您可以通过添加以下内容来消除这些警告:
_CRT_SECURE_NO_WARNINGS
Run Code Online (Sandbox Code Playgroud)
和
_SCL_SECURE_NO_WARNINGS
Run Code Online (Sandbox Code Playgroud)
到您项目的预处理器定义。