【发布时间】:2018-05-03 17:55:11
【问题描述】:
我刚刚开始了解 char 及其功能,我正在尝试像这样复制它。
我班上的老师给我们举了这个例子:
对于 s = "carte",strcpy(s+2, s+3) => s="cate"。显然我想尝试一下,但我收到了这个错误:
"严重性代码描述项目文件行抑制状态 错误 C2660 'strcpy_s':函数不接受 2 个参数 "
提示? 谢谢。
【问题讨论】:
-
您的示例显示了
strcpy的使用,而错误消息说您正在使用strcpy_s,那么您使用的是哪一个,真的吗?请提供minimal reproducible example。 -
你的老师给了你一个不好的例子,应该被枪毙。这是您告诉他/她的内容:内存源和目标重叠,并且他/她假设 strcpy 将使用 memmove (它可以安全地进行复制),因为这不是现实生活中发生的情况。编辑:@AlgirdasPreidžius 在错误中发现了对
strcpy_s的引用!如果老师使用它,那么会有一个大小参数:即使这样 如果源字符串和目标字符串重叠,strcpy_s 的行为是未定义的 -
如果目标和源重叠,则不能使用
strcpy。 -
@AhmedMasud 他并没有像我上面所说的那样对 strcpy_s 说什么。 “我尝试使用 strcpy,但我从 Visual Studio 收到错误,我在阅读应该使用它后将其更改为 strcpy_s。”他只谈到了strcpy,但我不能使用它。 (见上文)
-
@KillzoneKid 如果您正在写入的部分缓冲区与您正在读取的部分缓冲区共享,则这是重叠。
标签: c++