Strcpy的函数原型:
char *strcpy(char *dst, const char *src)
函数功能:
将字符串src拷贝到字符串dst中去。
用法解析:
在执行字符串拷贝之前,“用户需要保证”dst指向的空间足够大。否则的话,可能会产生意想不到的后果。
如果dst所指向的空间不足以存储src中的字符串的话,不要以为只是遗失了src中存储不下的字符串这么简单。
在VC的库函数中,strcpy()的定义如下:
char * __cdecl strcpy(char * dst, const char * src)
{
char * cp = dst;
while( *cp++ = *src++ )
; /* Copy src over dst */ /*注意这行有个分号*/
return( dst );
}
需要留意的是,这个函数定义中的循环语句:
while( *cp++ = *src++ )
;
这个循环会一直执行,直到循环条件为0。注意这里的0不是数字里的零,而是ASCII码中的0。也就是’/0’ 。
也就是说,如果dst所指向的存储空间不够大的话,这个函数会将src中的部分内容拷贝到dst所指内存空间后面的内存中。而dst所指空间后面的内存却是不可知的,有可能已经被其它资源占用了,这样就会破坏掉原先存储的内容,导致系统崩溃。
因为strcpy在执行字符串拷贝的时候,会从src所指位置开始,检测当前内存单元中存储的数据是否为‘/0’。如果不为‘/0’,则将这个内存单元中的数据拷贝到dst所指向的内存中。如果src中存储的字符串长度大于dst所申请的内存空间的话,就会产生越界,造成不可预知的后果。
Strncpy的函数原型:
char *strncpy(char *dest, const char *src,int count)
函数功能:
将字符串src中的count个字符拷贝到字符串dest中去。
用法解析:
这个函数和strcpy类似,当src的长度大于dst申请的空间的时候,情况和strcpy一样;
如果第3个参数count的值大于src中字符串的长度的话,就会将字符串src拷贝到dst中,返回函数。
示例程序:
#include <iostream>
// #include <conio.h> // for getch()
#include <string.h> // for stycpy()
using namespace std;
int main()
{
int i = 0;
char dst[11] = "1234567890";
char src[15] = {'1','2','3','4','5','/0','7','8','9','0','1','2','3','4'};
strcpy( dst, src );
cout<<"strcpy()"<<endl;
cout<<dst<<endl<<endl;
strncpy( dst, src, 14 ); // cont = 14
cout<<"strncpy()"<<endl;
cout<<dst<<endl<<endl;
// getch();
return 0;
}
程序执行结果:
strcpy()
12345
strncpy()
12345
分享到:
相关推荐
C语言字符串复制库函数strcpy和strncpy区别
1. 复制的内容不同 2. 复制的法不同 3. 途不同 1. dest指向的空间要够拷 3. 使strncpy时,确保dest的最后个字符是“\0”
。。。
用于了解安全函数strcpy_s、strncpy_s、snprintf_s、memcpy_s
strcpy 和strcnpy函数是字符串复制函数。接下来通过本文给大家介绍c语言中的strcpy和strncpy字符串函数使用,感兴趣的朋友跟随小编要求看看吧
主要介绍了详解C语言中strcpy()函数与strncpy()函数的使用,是C语言入门学习中的基础知识,需要的朋友可以参考下
strcpy原型声明:extern char *strcpy(char* dest, const char *src);头文件:#include 功能:把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间说明:src和dest所指内存区域不可以重叠且dest必须...
strcmp strcpy strcat strlen 的实现 以及与strncat strncpy strncmp memcpy memcmp 原型分析
1、strcpy和strncpy函数 这个不陌生,大一学C语言讲过,其一般形式为strcpy(字符数组1,字符串2)作用是将字符串2复制到字符数组1中去。 EX: char str1[10]='',str2[]={China}; strcpy(str1,str2); strncpy...
将 strcpy 用 strncpy 替换, 并且将末尾字节设置为 ”\0′ . 代码如下:strncpy(buf, str, len);buf[len] = 0; 您可能感兴趣的文章:浅析C语言中printf(),sprintf(),scanf(),sscanf()的用法和区别基于C语言sprintf...
strncpy这个可以指定拷贝字符的长度,指定源地址,目标地址,还有需要拷贝的字符的长度;strcpy只能传入两个参数,只指定拷贝的起始地址跟目标地址,然后整体拷贝;
strcpy,strncpy,strcat,strncat,strcmp,strncmp,strchr,strnchr,strlen,strnlen,strspn,strpbrk,strtok,strsep,memset,bcopy,memcpy,memmove,memcmp,memscan,strstr,memchr.函数具体实现内容。对理解C语言和C编程有...
strcpy(char str1,char str2) strncpy(char str1,char str2,int n) strcmp(char str1,char str2)//比较两个字符串大小str1>str2返回值>0,str1=str2返回值=0,str1返回值 strlen(char str)//返回字符串数据长度 ...
c代码-C语言编写一个程序,将字符数组str2中的全部字符复制到字符数组str1中
glibc2.16源码下载 glibc-2.16.0.tar.bz2 malloc strcpy strncpy 等标准函数的实现,提高嵌入式编程的神器。
包括数组访问越界,或在使用一些写内存的函数时,长度指定不正确或者这些函数本身不能指定长度,典型的函数有strcpy(strncpy),sprintf(snprint)等等。 3 对于C++对象,应该通过相应类的接口来去内存进行操作,禁止...
* 常见的字符串函数实现: * strlen * strcpy strncpy * strcmp strncmp * strcat strncat * strstr * * 内存操作: * memset、memcmp、memcpy、memmove * * 字符串和数组转换: * atoi itoa *
os_strcpy(tttt,sntp_get_real_time(time)); //因为后期使用的os_strncpy函数不能自动将字符串中的\0字符串结束符号一并拷贝进来,所以这里根据年月日的长度构造函数,并初始化后各位有\0符号,不至于函数崩溃 ...