这个strcat_s哪里错了



// cpp : 从键盘输⼊长度不等的两个字串,将短串连接于长串之后输出。
//

#include <iostream>
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
using namespace std;
int main()
{
    char str1[100], str2[100];
    
    scanf_s("%s", str1,sizeof(str1));
    scanf_s("%s", str2, sizeof(str2));
    int len = strlen(str1) + strlen(str2) + 1;
    if (strlen(str1) > strlen(str2))
    {
        cout << strcat_s(str1, len, str2) << endl;
    }
    else 
    cout << strcat_s(str2, len, str1) << endl;
   
}

img

errno_t strcat_s(char *strDestination , size_t numberOfElements , const char *strSource );
strcat_s函数返回值是是否有错误,因为没错误,所以你输出了0
如果要输出最终字符串,那么写合并,然后cout<<str1<<endl;

strcat_s把两个字符串连起来放在第一个里面,但是它本身不会返回第一个字符串的指针
应该是
strcat_s(str1, len, str2);
cout << str1 << endl;

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7698371
  • 这篇博客你也可以参考下:C字符串操作strcat/strcat_s详解
  • 同时,你还可以查看手册:c语言-strcat_s() 中的内容
  • 以下回答由chatgpt基于相关博客总结生成:

    根据参考资料和你提供的错误信息,错误的原因是str1的长度超过了它的容量。解决这个问题的方法是为str1声明一个更大的数组。

    char str1[100] = "Hello ";
    char str2[50] = "world!";
    strcat_s(str1, sizeof(str1), str2);
    

    这样,str1的容量将能够容纳拼接后的字符串。请注意,我在这里将str1的容量增加到了100,你可以根据实际需要来调整容量的大小。

    如果你在代码中已经使用了str1的长度超过了它的容量的字符串拼接,那么你需要使用动态内存分配来解决这个问题。下面是一个使用动态内存分配的示例代码:

    char* str1 = malloc(strlen("Hello ") + strlen("world!") + 1);
    strcpy(str1, "Hello ");
    strcat_s(str1, sizeof(str1), "world!");
    

    这里我使用了malloc函数来动态分配足够的内存来存储拼接后的字符串。请确保在使用完后调用free函数来释放内存。