strcpy_s的用法

voidmain(){charstr[10],str1[9];for(inti=0;i<9;i++){str1[i]='a';}strcpy_s(str,sizeof(s... void main()
{
char str[10], str1[9];
for(int i=0; i<9;i++)
{
str1[i] ='a';
}
strcpy_s(str, sizeof(str), str1);
cout<<str<<endl;
}
上述代码运行时异常。为什么会出现异常?
这是异常报告。
请问出现异常的原因是什么?
展开
 我来答
郭欢nb
高粉答主

2019-08-21 · 繁杂信息太多,你要学会辨别
知道答主
回答量:5
采纳率:100%
帮助的人:1143
展开全部

strcpy,即string copy(字符串复制)的缩写。strcpy是一种C语言的标准库函数,strcpy把含有'\0'结束符的字符串复制到另一个地址空间,返回值的类型为char*。

返回strDest的原始值使函数能够支持链式表达式,增加了函数的“附加值”。同样功能的函数,如果能合理地提高的可用性,自然就更加理想。

返回strSrc的原始值是错误的。其一,源字符串肯定是已知的,返回它没有意义。其二,不能支持形如第二例的表达式。其三,为了保护源字符串,形参用const限定strSrc所指的内容,把const char *作为char *返回,类型不符,编译报错。

扩展资料

将问题通过功能分解,各个击破的编程方法(过程化编程) 是一种以行为抽象为主的抽象编程将问题通过实体分析,分层分类地实现抽象数据类型,从而进行简单应用编程(基于对象编程)是一种以数据抽象为主的抽象编程

这种抽象编程,通过数据类型复用,方便编程,方便维护和扩展,其效果比过程化编程更好编程语言中没有许多具体的数据类型要解决实际问题,很大部分工作是要建立数据模式与实际问题的对应,也就是建立抽象数据类型的过程对象化编程就是基于分层分类的抽象数据类型之具体编程。

参考资料来源:百度百科-strcpy

Sigma-Aldrich
2018-06-11 广告
关于“介词 + which / whom”引导的定语从句 “介词+关系代词”引导的定语从句,是定语从句一种介词前置的定语从句句型,介词与关系代词之间存在一种介宾关系。当关系代词在定语从句中作介词宾语时,把介词置于关系代词前,即演变出“介词+... 点击进入详情页
本回答由Sigma-Aldrich提供
麻木y1
高粉答主

2019-08-02 · 每个回答都超有意思的
知道小有建树答主
回答量:765
采纳率:100%
帮助的人:22.3万
展开全部

strcpy是把含有'\0'结束符的字符串复制到另一个地址空间,返回值的类型为char*。可以把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。

例:

已知strcpy函数的原型是:char * strcpy(char * strDest,const char * strSrc);

1、不调用库函数,实现strcpy函数。

2、解释为什么要返回char *。

扩展资料:

错误的做法:

1、不检查指针的有效性,说明答题者不注重代码的健壮性。

2、检查指针的有效性时使用((!strDest)||(!strSrc))或(!(strDest&&strSrc)),说明答题者对C语言中类型的隐式转换没有深刻认识。

char *转换为bool即是类型隐式转换,这种功能虽然灵活,但更多的是导致出错概率增大和维护成本升高。所以C++专门增加了bool、true、false三个关键字以提供更安全的条件表达式。

3、检查指针的有效性时使用((strDest==0)||(strSrc==0)),说明答题者不知道使用常量的好处。直接使用字面常量(如本例中的0)会减少程序的可维护性。

0虽然简单,但程序中可能出现很多处对指针的检查,万一出现笔误,编译器不能发现,生成的程序内含逻辑错误,很难排除。而使用NULL代替0,如果出现拼写错误,编译器就会检查出来。

参考资料来源:百度百科-strcpy

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
真白的纱雾d442c
推荐于2017-09-03 · TA获得超过1093个赞
知道小有建树答主
回答量:265
采纳率:0%
帮助的人:538万
展开全部
strcpy_s是根据'\0'判断源字符串结束的
代码中的str1[9]的9个数组成员都被赋值为'a',没有结束符'\0',因此strcpy_s在复制完str1的9个字符后还在继续赋值其后的内存,并且最终复制的字符数大于了目标缓冲区的长度10,因此引发此断言失败。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
谁把誓言换流年
2010-11-22 · TA获得超过259个赞
知道小有建树答主
回答量:199
采纳率:0%
帮助的人:203万
展开全部
void main()
{
int i;
char str[10], str1[9];
for(i=0; i<9;i++)
{
str1[i] ='a';
}
str1[i-1]='\0';
strcpy_s(str, sizeof(str), str1);
cout<<str<<endl;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
传信秋风4
2021-12-16
知道答主
回答量:3
采纳率:0%
帮助的人:2219
展开全部
str1赋值后,没有'\0'结束符, str1的长度比str小, 复制的时候越界了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式