有个的题差一错误分析不来

01 #include
02 #include
03 #include
04
05 int main(void) {
06 char s1[] = "012345678";
07 char s2[] = "0123456789";
08 char dest;
09 int i;
10
11 strcpy_s(s1, sizeof(s2), s2);
12 dest = (char *)malloc(strlen(s1));
13 for (i=1; i <= 11; i++) {
14 dest[i] = s1[i];
15 }
16 dest[i] = '\0';
17 printf("dest = %s", dest);
18 /
... */;
}
这是原代码,麻烦各位大佬看一下

strcpy_s(s1,sizeof(s2), s2);
dest = (char*)malloc(strlen(s1)+1);
for ( i = 0; i <11; i++)
{
    dest[i] = s1[i];
}
dest[i+1] = '\0';
这个是我自己改的,但怎么

strcpy_s(s1,sizeof(s2), s2);
这里就不对,第二个参数是目标缓冲区的长度,也就是s1的长度,你是s2的长度,而s2又比s1长,造成缓冲区溢出。

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^