正如问题所言,有没有办法为 strcat_s() 函数创建一个包装器?就个人而言,我觉得它更难使用。另外为什么它会返回一个errno?
我想做一个看起来像这样的包装器。我也不想启用 _crt_secure_no_warnings
void (char* dest, char* src)
{
// Execute strcat_s() here
}
塞缪尔
有没有办法为 strcat_s() 函数创建一个包装器?
是的。定义一个函数。在函数中,调用strcat_s. 现在您的函数是strcat_s.
有没有办法为 strcat_s() 函数创建一个包装器?
您无法有意义地创建包装函数。MS 将这些警告/错误放在那里的全部原因是传统 c 字符串处理函数的接口在设计上是不安全的。
所以虽然从技术上讲,你可以写类似的东西。
void stupid_strcat(char* dest, char * src)
{
strcat_s(dest,strlen(dest)+strlen(src)+1,src);
}
这样做只会导致比 strcat 慢并且同样不安全的东西。
如果您的目标是直接访问(而不是通过指针)数组,那么您可以编写一个类似的宏。
#define array_strcat(dest,src) strcat_s(dest,sizeof(dest),src)
就个人而言,我觉得它更难使用。
安全地处理 C 字符串是一件痛苦的事情。通常在 C++ 中,您应该避免使用 C 字符串,而应使用 std::string 或类似的。
另外为什么它会返回一个errno?
strcat_s 可以在运行时检测某些错误。当检测到此类错误时,将调用“约束处理程序”。如果约束处理程序返回,则错误将被传递回 strcat_s 的调用者,因此它知道发生了错误。