-3

正如问题所言,有没有办法为 strcat_s() 函数创建一个包装器?就个人而言,我觉得它更难使用。另外为什么它会返回一个errno?

我想做一个看起来像这样的包装器。我也不想启用 _crt_secure_no_warnings

void (char* dest, char* src) 
{
    // Execute strcat_s() here
}

塞缪尔

4

2 回答 2

1

有没有办法为 strcat_s() 函数创建一个包装器?

是的。定义一个函数。在函数中,调用strcat_s. 现在您的函数是strcat_s.

于 2019-12-25T16:44:20.257 回答
-3

有没有办法为 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 的调用者,因此它知道发生了错误。

于 2019-12-25T19:59:17.883 回答