我收到警告:
warning C4996: 'strncpy': This function or variable may be unsafe. Consider using strncpy_s instead.
To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
F:\vuStudio\VC\include\string.h(188) : see declaration of 'strncpy'
我在 stackoverflow.com 上读到strcpy
不安全,我应该使用strncpy
反而。但现在为什么我收到 strncpy 不安全的警告?
我将其称为:
strncpy(this->title, title.c_str(), sizeof(this->title));
strncpy
有一些危险的怪癖。
首先,它将复制结束后的目标缓冲区清零,这可能会令人惊讶。
其次,如果目标缓冲区没有足够的空间,它会notnull 终止目标缓冲区。
第三,如果它被截断,那么它“大部分有效”。这会阻碍错误处理(截断的字符串通常比无用更糟糕,但不appear乍一看比无用更糟糕)。
strncpy_s
需要输入长度(或显式截断请求),如果没有足够的空间来空终止(在输出中仅写入零长度字符串),则会出现错误。有时提供输入长度的效率很低(并且某些更改不需要),但即使在错误情况下,它也能保证以 null 结尾的输出缓冲区(只要它不是 nullptr 或零长度)。我不确定它是否在复制的字符串末尾归零。
此行为可以防止或减轻字符串代码中的一些常见栅栏错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)