strcpy函数如何使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了strcpy函数如何使用相关的知识,希望对你有一定的参考价值。

1、strcpy 函数使用方法:

strcpy()函数是C语言中的一个复制字符串的库函数。

2、空指针检查:源指针和目的指针都有可能会出现空指针的情况,所以应该对其进行检查。

3、const 修饰:源字符串参数用const修饰,防止修改源字符串;

4、为什么要设置ret 指针以及返回ret指针的位置[3],由于目的指针dst已经在进行移动了,所以用辅助指针ret表明首指针;

扩展资料:

strcpy 函数的错误用法及反馈:

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

2、(A)return new string("Invalid argument(s)");,说明答题者根本不知道返回值的用途,并且他对内存泄漏也没有警惕心。从函数中返回函数体内分配的内存是十分危险的做法,他把释放内存的义务抛给不知情的调用者,绝大多数情况下,调用者不会释放内存,这导致内存泄漏。

3、(B)return 0;,说明答题者没有掌握异常机制。调用者有可能忘记检查返回值,调用者还可能无法检查返回值(见后面的链式表达式)。妄想让返回值肩负返回正确值和异常值的双重功能,其结果往往是两种功能都失效。应该以抛出异常来代替返回值,这样可以减轻调用者的负担、使错误不会被忽略、增强程序的可维护性。

4、(A)忘记保存原始的strDest值,说明答题者逻辑思维不严密。

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

参考技术A

strcpy函数的使用:

strcpy()函数是C语言中的一个复制字符串的库函数。

char * strcpy(char *dst,const char *src)   

if((dst==NULL)||(src==NULL))

return NULL;

char *ret = dst; //[1]

while ((*dst++=*src++)!='\\0'); //[2]

return ret;//[3]

一、const 修饰:源字符串参数用const修饰,防止修改源字符串;

二、空指针检查:源指针和目的指针都有可能会出现空指针的情况,所以应该对其进行检查

三、为什么要设置ret 指针以及返回ret指针的位置[3],由于目的指针dst已经在进行移动了,所以用辅助指针ret表明首指针;

四、以上所示[2]处,为简单的字符串的复制过程,正好表明strcpy函数遇到'\\0'将会停止;

扩展资料:

strcpy应用条例:

一、原型声明:char *strcpy(char* dest, const char *src);

二、头文件:#include <string.h> 和 #include <stdio.h>

三、功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间

四、说明:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

返回指向dest的指针。

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

参考技术B

strcpy()是C中的一个复制字符串的库函数,在C++中现在编译器要求使用strcpy_s(),提高安全性,效果是一样的,只是防止源串的长度比目的串的长度大,导致最终的内存越界。

函数声明及实现代码:

char* strcpy(char*dst, const char*src)

char* strcpy(char*dst, const char *src)

   if ((dst == NULL) || (src == NULL))        return NULL;    char *ret = dst;  //

   while ((*dst ++= *src++) != '\\0');

       return ret;  

const 修饰:源字符串参数用const修饰,防止修改源字符串;

空指针检查:源指针和目的指针都有可能会出现空指针的情况,所以应该对其进行检查。

为什么要设置ret 指针以及返回ret指针的位置,由于目的指针dst已经在进行移动了,所以用辅助指针ret表明首指针。

扩展资料:

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

如果,源字符串比目的缓冲区长度不长,也要在异常处理中结束程序,以防止出现溢出情况。任何程序都很难说是绝对安全,只能以尽可能安全的方式来处理
strcpy 函数。

只要输入的字符串不以空字符结束,函数就会随时终止。这种检测容易实现。但是这样的检测也并不能确定函数一定安全。

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


参考技术C 字符串拷贝函数strcpy
格式: strcpy (字符数组名1,字符数组名2)
功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“\0”也一同拷贝。字符数名2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。
#include"string.h"
main()

char st1[15],st2[]="C Language";
strcpy(st1,st2);
puts(st1);printf("\n");

本函数要求字符数组1应有足够的长度,否则不能全部装入所拷
贝的字符串。
参考技术D 字符串拷贝函数strcpy。格式: strcpy (字符数组名1,字符数组名2)。功能:把字符数组2中的字符串拷贝到字符数组1中。串结束标志“\0”也一同拷贝。字符数名2,也可以是一个字符串常量。这时相当于把一个字符串赋予一个字符数组。#include"string.h"。main()。。char st1[15],st2[]="c language"。strcpy(st1,st2)。puts(st1)。printf("\n")。。本函数要求字符数组1应有足够的长度,否则不能全部装入所拷。贝的字符串。

strcpy函数在VS2015无法使用的问题

一:原因:一般认为vs准备弃用strcpy的,安全性较低,所以微软提供了strcpy_s来代替

 然而,strcpy_s并没有strcpy好用,我们要想继续在VS2015中使用strcpy该怎么办 呢?下面是几种解决方法

解决方法:

  1.其实在下面的输出错误信息中有解决方法,“To disable deprecation , use _CRT_SECURE_NO_WARNINGS”,意思是我们可以不进行兼容性检查,我们可以在项目-属性-配置属性-c/c++-预处理器-预处理定义里边加上一句:_CRT_SECURE_NO_WARNINGS ,如下图所示

  2.也是在下面的输出信息中,我们可以看到有一处错误代号“ error C4996:”,所以我们可以在程序开头加上一句“#pragma warning(disable:4996)”就行,意思是忽略这个错误,如下图

  3.第三种方法是:我们可以在:项目-属性-配置属性-c/c++中的常规,里面有个SDL选项,关了。还有在代码生成中有个安全检查选项(/GS),关了。虽然这种方法也可以解决这个问题,但是我本人不太提倡这种解决办法,还是前两种解决方法比较好

 

以上是关于strcpy函数如何使用的主要内容,如果未能解决你的问题,请参考以下文章

strcpy函数体现出的编程细节

strcat函数如何执行

如何将当前的 strcpy 转换为 strcpy_s?

如何strcpy并返回复制的字符数?

memcpy和strcpy的区别

strcpy函数在VS2015无法使用的问题