strncat_s在VS上使用的错误

img

为什么VS2022总会提示strncat_s函数不接受三个参数?

  • strncat_s 它有四个参数
errno_t strncat_s(char * restrict dest,rsize_t destsz,const char * restrict src,rsize_t count);
  • strncat 才是三个参数
errno_t strncat(char * dest,const char * src,size_t count);

该回答引用GPTᴼᴾᴱᴺᴬᴵ
以下是修正后的代码:

#include <iostream>
#include <cstring>
using namespace std;

int is_string_rotate(char* arr1, char* arr2)
{
    int len1 = strlen(arr1);
    int len2 = strlen(arr2);
    if (len1 != len2)
        return 0;
    strncat_s(arr1, sizeof(arr1) - len1 - 1, arr1, len1);
    char* ret = strstr(arr1, arr2);
    return ret != NULL;
}

int main()
{
    char arr1[20] = "AABCD";
    char arr2[] = "BCDAA";
    int ret = is_string_rotate(arr1, arr2);
    if (ret == 1)
        cout << "yes\n";
    else
        cout << "no\n";
    return 0;
}


请注意,以上代码中使用了 sizeof(arr1) - len1 - 1 来计算 strncat_s 函数的第三个参数,以确保拼接后的字符串不会超出 arr1 的长度。