在有指针的情况下为什么strcpy_s只支持三个参数?

努力努力再努力^ 2018-04-22 07:56:33

这样写提示不接受两个参数,但是如果改成strcpy_s(Name,20,name);就对了,为什么呢?求大神解答!!!
下面是整个程序:
#include<iostream>
using namespace std;
class Student
{
char Num[10];
char *Name;
int Score;
public:
Student(char *num, char *name, int s)
{
strcpy_s(Num, num);
Name = new char[10];
strcpy_s(Name,20,name);
Score = s;
}
~Student()
{
delete[]Name;
}
void Show()
{
cout << Num << " " << Name << " " << Score << endl;
}
};
int main()
{
Student s1("123", "xiaoli", 23);
Student *s2 = new Student("124", "xiaoming", 21);
s1.Show();
s2->Show();
delete s2;
system("pause");
return 0;
}
...全文
1232 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
轻箬笠 2018-04-24
  • 打赏
  • 举报
回复
strcpy支持两个参数
自信男孩 2018-04-24
  • 打赏
  • 举报
回复 1
strcpy_s是对strcpy的封装,_s是safe,即比strcpy安全。这个安全是由第三个参数来保证的,即拷贝的字符串的字节数。
paschen 版主 2018-04-22
  • 打赏
  • 举报
回复
引用 4 楼 ZWlovecomputer的回复:
指针就没有办法推导出缓冲区的大小了是吗?因为指针指向的是一个地址
是啊,指针你可以指向任何地方,你可以运行时动态分配空间,而编译时编译器是没法知道的
  • 打赏
  • 举报
回复
指针就没有办法推导出缓冲区的大小了是吗?因为指针指向的是一个地址
paschen 版主 2018-04-22
  • 打赏
  • 举报
回复
如果你的参数是字符数组的话,strcpy_s可以通过模板推导出缓冲区大小,此时可以只有两个参数
paschen 版主 2018-04-22
  • 打赏
  • 举报
回复
strcpy_s是需要一个参数指明缓冲区大小,以进行检查,所以有三个参数

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧