为了账号安全,请及时绑定邮箱和手机立即绑定

单元巩固的编程题,按照答案输入提交都不对,怎么回事?....

按照答案写也不对,看不出哪错了

把答案的代码输入vs2015实际测试,发现在 "strcpy(str, "Hello C++");这一行出现错误,编译错误为:

错误 C4996 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. test1 c:\users\iamst\documents\visual studio 2015\projects\test\test1\cout.cpp 8

请问错误在哪。。。望各位指教>_<

正在回答

3 回答

strcpy_s和strcpy()函数的功能几乎是一样的。strcpy函数,就象gets函数一样,它没有方法来保证有效的缓冲区尺寸,所以它只能假定缓冲足够大来容纳要拷贝的字符串。在程序运行时,这将导致不可预料的行为。用strcpy_s就可以避免这些不可预料的行为。
这个函数用两个参数、三个参数都可以,只要可以保证缓冲区大小。
三个参数时:
errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
const char *strSource
);
两个参数时:
errno_t strcpy_s(
char (&strDestination)[size],
const char *strSource
); // C++ only

例子:

#include<iostream>

#include<cstring>

using namespace std;

void Test(void)

{

char *str1=NULL;

str1=new char[20];

char str[7];

strcpy_s(str1,20,"hello world");//三个参数

strcpy_s(str,"hello");//两个参数但如果:char *str=new char[7];会出错:提示不支持两个参数

cout<<"strlen(str1):"<<strlen(str1)<<endl<<"strlen(str):"<<strlen(str)<<endl;

printf(str1);

printf("\n");

cout<<str<<endl;

}

int main()

{

Test();

return 0;

}

#include<iostream>

#include<string.h>

using namespace std;

void Test(void)

{

char *str1=NULL;

str1=new char[20];

char str[7];

strcpy_s(str1,20,"hello world");//三个参数

strcpy_s(str,"hello");//两个参数但如果:char *str=new char[7];会出错:提示不支持两个参数

cout<<"strlen(str1):"<<strlen(str1)<<endl<<"strlen(str):"<<strlen(str)<<endl;

printf(str1);

printf("\n");

cout<<str<<endl;

}

int main()

{

Test();

return 0;

}


输出为:
strlen(str1): 11        //另外要注意:strlen(str1)是计算字符串的长度,不包括字符串末尾的“\0”!!!
strlen(str): 5
hello world
hello


1 回复 有任何疑惑可以回复我~
#1

么么哒小七

回答的真的很好,帮助我解决了问题,谢谢!
2016-03-29 回复 有任何疑惑可以回复我~

我后来明白了,答案这种书写不规范,strcpy应该换成另一个函数来复制。

0 回复 有任何疑惑可以回复我~

这应该不是编译错误吧,这只是警告,你这个函数或者函数参数不安全。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
C++远征之离港篇
  • 参与学习       122700    人
  • 解答问题       474    个

C++扫清通往面向对象的最后一道障碍,将所有知识点融会贯通

进入课程

单元巩固的编程题,按照答案输入提交都不对,怎么回事?....

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信