VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 214|回复: 4

这是编译器的问题吗?

[复制链接]
32_avatar_middle
最佳答案
0 
在线会员 发表于 2019-10-10 12:04:27 | 显示全部楼层 |阅读模式
  1. #pragma once
  2. #include <iostream>
  3. using namespace std;
  4. #include <string>
  5. class student
  6. {
  7. public:
  8.         char name[50];
  9.         char* p = name;
  10.         int num;
  11.         char sex;
  12.         int age;
  13.         student(char* pname, char t_sex, int t_num, int t_age)
  14.         {
  15.                 //strcpy_s(name, pname);
  16.                 strcpy_s(p, pname);
  17.                 num = t_num;
  18.                 sex = t_sex;
  19.                 age = t_age;
  20.         }
  21. };
复制代码

编译器报错:>e:\visual studio 2013\hello world\hello world\student.h(16): error C2660: “strcpy_s”: 函数不接受 2 个参数
但是我用被注释的那行代码代替就可以编译通过,
老师视频里面这样用为什么可以通过呢?是我编译器的问题吗?




上一篇:36课的小作业,按照答案做了还是崩溃,求解答
下一篇:关于运算符重载,报错找不出来,要疯了!!
01_avatar_middle
最佳答案
38 
online_admins 发表于 2019-10-10 13:07:11 | 显示全部楼层
因为name是个数组的首地址,对数组首地址求 sizeof 就能知道这个数组的长度了。所以 strcpy_s(name, pname); 这么使用的时候可以知道目的缓冲区的大小,所以参数要2个就够了。而 p 呢,他只是个指针,对 p 求 sizeof 无法知道 p 指向的缓冲区的大小。所以 strcpy_s(p, pname); 使用的时候就必须得告诉函数目的缓冲区的大小了。

也就是说 strcpy_s 有多重重载的方式!
32_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2019-10-10 14:08:10 | 显示全部楼层
admin 发表于 2019-10-10 13:07
因为name是个数组的首地址,对数组首地址求 sizeof 就能知道这个数组的长度了。所以 strcpy_s(name, pname) ...

还想问一下,老师视频里面 strcpy(name, pname)可以这样使用,为什么我的编译器这样使用就会报错,必须要用 strcpy_s代替strcpy呢?
01_avatar_middle
最佳答案
38 
online_admins 发表于 2019-10-10 14:50:01 | 显示全部楼层
aaa@ 发表于 2019-10-10 14:08
还想问一下,老师视频里面 strcpy(name, pname)可以这样使用,为什么我的编译器这样使用就会报错,必须要 ...

编译器版本不同,对一些不安全的函数的限定级别不同,我用的vs2013对于 strcpy 这样的不安全函数只作为警告处理。如果楼主是用更高版本的 vs,可能对于不安全的函数就是 错误处理了
38_avatar_middle
最佳答案
0 
在线会员 发表于 2019-10-10 16:29:07 | 显示全部楼层
int len = strlen(pname);  strcpy_s(p,len +1, pname);
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-9-21 00:45

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表