C++ C++;-使用strcpy(s+;2,s+;3);不';t工作-“;函数不接受2个参数";

C++ C++;-使用strcpy(s+;2,s+;3);不';t工作-“;函数不接受2个参数";,c++,C++,我刚开始学习char和它的函数,我正试图这样复制它 我的老师在课堂上给我们举了一个例子: 对于s=“carte”,strcpy(s+2,s+3)=>s=“cate”。显然,我想尝试一下,但我得到了一个错误: “严重性代码说明项目文件行抑制状态 错误C2660“strcpy_s”:函数不接受2个参数 " 小费? 谢谢。strcpy\u s接受3个参数。请注意“安全”的后缀。确保您提供了正确的目标缓冲区大小,以使其在该函数检查缓冲区溢出(因此是“安全”后缀)时正常工作 供参考:以下是CPPFREFE

我刚开始学习char和它的函数,我正试图这样复制它

我的老师在课堂上给我们举了一个例子:

对于s=“carte”,strcpy(s+2,s+3)=>s=“cate”。显然,我想尝试一下,但我得到了一个错误:

“严重性代码说明项目文件行抑制状态 错误C2660“strcpy_s”:函数不接受2个参数 "

小费?
谢谢。

strcpy\u s
接受3个参数。请注意“安全”的后缀
。确保您提供了正确的目标缓冲区大小,以使其在该函数检查缓冲区溢出(因此是“安全”后缀)时正常工作


供参考:以下是CPPFREFERENCE上函数的示例。strcpy采用3个参数。请注意“安全”的后缀
。确保您提供了正确的目标缓冲区大小,以使其在该函数检查缓冲区溢出(因此是“安全”后缀)时正常工作


供参考:以下是CPPFREFERENCE上函数的示例,您的示例显示了strcpy的用法,而错误消息显示您正在使用strcpy,那么您真的在使用哪一个呢?请提供。你的老师给了你一个坏榜样,你应该为此受到惩罚。以下是您告诉他/她的:内存源和目标重叠,他/她假设strcpy将使用memmove(它安全地进行复制),而现实生活中并非如此。编辑:@AlgirdasPreidžius在错误中捕捉到了对strcpy_
的引用!如果老师使用了这个参数,那么就会有一个大小参数:即使如此,如果源字符串和目标字符串重叠,strcpy的行为也是未定义的。如果目标字符串和源字符串重叠,则不能使用
strcpy
。@AhmedMasud他没有像我上面所说的那样谈论strcpy。“我试着使用strcpy,但我从VisualStudio收到一个错误,在读到应该使用strcpy后,我将它改为strcpy_。”他只谈到strcpy,但我不能使用它。(见上文)@KillzoneKid如果您正在写入的缓冲区部分与您正在读取的缓冲区部分共享,那么这是一个重叠。您的示例显示了strcpy的使用,而错误消息说您正在使用strcpy
,那么您真的在使用哪一个?请提供。你的老师给了你一个坏榜样,你应该为此受到惩罚。以下是您告诉他/她的:内存源和目标重叠,他/她假设strcpy将使用memmove(它安全地进行复制),而现实生活中并非如此。编辑:@AlgirdasPreidžius在错误中捕捉到了对strcpy_的引用!如果老师使用了这个参数,那么就会有一个大小参数:即使如此,如果源字符串和目标字符串重叠,strcpy的行为也是未定义的。如果目标字符串和源字符串重叠,则不能使用
strcpy
。@AhmedMasud他没有像我上面所说的那样谈论strcpy。“我试着使用strcpy,但我从VisualStudio收到一个错误,在读到应该使用strcpy后,我将它改为strcpy_。”他只谈到strcpy,但我不能使用它。(见上文)@KillzoneKid如果您正在写入的缓冲区部分与您正在读取的缓冲区部分共享,则这是一个重叠。它实际上也适用于strcpy_s(s,t)。(没有第三个)@f0rta只有当
s
是一个实际数组而不是指针时,它的大小才能由模板推断出来。它实际上也与strcpy_s(s,t)一起工作。(没有第三个)@f0rta只有当
s
是实际数组而不是指针时,才可以通过模板推断其大小