若有语句:char s1[ ]= 〞string 〞, s2[8],﹡s3,﹡s4= 〞string2 〞;则对库函数strcpy的错误调用是

A)strcpy(s1,〞string2〞);B)strcpy(s4,〞string1〞);C)strcpy(s3,〞string1〞);D)strcpy(s1,s2);... A)strcpy(s1, 〞string2 〞); B)strcpy(s4, 〞string1 〞);
C)strcpy(s3, 〞string1 〞); D)strcpy(s1, s2);
能不能解释详细一点,谢了
展开
 我来答
热爱学习的Genji
高粉答主

2021-01-14 · 说的都是干货,快来关注
知道小有建树答主
回答量:1894
采纳率:100%
帮助的人:27.3万
展开全部

若有语句:char s1[ ]= 〞string 〞, s2[8],﹡s3,﹡s4= 〞string2 〞;则对库函数strcpy的错误调用是strcpy(s3, 〞string1 〞);

strcpy不管是否会溢出,,保证不发生溢出是程序员做的,所以A正确。

s3未初始化,没有指向任何一片空间,C错误,B、D正常操作。

C 语言和 C++语言风格轻松、灵活,语法限制宽松,因而受到各类程序员的欢迎,是比较通用的编程语言,同时也是各大院校计算机专业的基本语言课程。

strcpy 函数由于不对数组边界进行检查,而非常容易造成各种缓冲区溢出的漏洞。这些漏洞很容易被利用,而造成严重的系统问题。在使用 strcpy 函数时,要小心谨慎。

扩展资料:

Strcpy函数的安全编码:

在编程时,加入错误检查,就可及时发现错误,并且对出现的异常进行处理。在编写 strcpy 函数时,首先尽量使目的缓冲区长度足够长,另外要检测目的缓冲区和源缓冲区。如果目的缓冲区或源缓冲区是空,就要在异常处理中结束程序。

如果,源字符串比目的缓冲区长度不长,也要在异常处理中结束程序,以防止出现溢出情况。任何程序都很难说是绝对安全,只能以尽可能安全的方式来处理 strcpy 函数。只要输入的字符串不以空字符结束,函数就会随时终止。这种检测容易实现。但是这样的检测也并不能确定函数一定安全。

另外,每添加一个错误检查,就会使程序更复杂,而且可能产生很多的 bug,增加很多的工作量。最重要的是,即使设计程序时非常仔细,也有可能会忽略一些细节问题,导致不可弥补的错误。

所以,在编写程序时,最安全的方法,就是尽可能不去使用 strcpy 函数。可以在程序的开头加上 #define strcpy Unsafe_strcpy。

这样,就会使 strcpy 函数在编译时产生错误,从而使我们在编程时可以完全摒弃strcpy 函数。在完全丢弃 strcpy 函数的同时,也就丢掉了众多依附于 strcpy 函数的 bug。

百度网友4453095189
推荐于2018-03-14 · TA获得超过4036个赞
知道小有建树答主
回答量:1486
采纳率:0%
帮助的人:1111万
展开全部
应该是c?
如果我的答案是正确的,是这么个原因:
数组也好,指针也好,从编译器角度看,就是一片空间外加一个地址。上面四个声明方式,只有第三个只给出了地址而没有给出任何空间声明,换句话说,第三个只是一个指针,而不是实际存在的东西。
strcpy是把一串内容拷贝到另一串地址上,如果目标处没有空间,那自然不能通过……
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2019-12-10
展开全部
如果是选c的话,可能是因为s3是野指针吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式