美文网首页C/C++学习笔记
浅谈strcpy和strncpy

浅谈strcpy和strncpy

作者: 鲁大帅 | 来源:发表于2017-07-13 20:57 被阅读152次

strcpy和strncpy

1. strcpy函数:顾名思义字符串复制函数:原型:extern char *strcpy(char *dest,char *src); 功能:把从src地址开始且含有NULL结束符的字符串赋值到以dest开始的地址空间,返回dest(地址中存储的为复制后的新值)。要求:src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

一般函数原型实现方式:

char * strcpy(char * strDest,const char * strSrc)

{

char * strDestCopy=strDest; //[3]

if ((strDest==NULL)||(strSrc==NULL)) //[1]

throw "Invalid argument(s)"; //[2]

while ((*strDest++=*strSrc++)!='\0'); //[4]

return strDestCopy;

}

该函数的参数是字符指针,也就是可以是字符串变量和字符数组,因为它们的变量名代表首字符地址。字符串默认有一个null结束符,字符数组没有。所以此处需要注意:因为src要求有null结束符,所以字符数组的长度必须大于等于src包含null结束符的总长度。例如,char* src="abcd"; char dest[5]; 这里dest的长度就至少为5。

2. strncpy函数:多个n代表可以指定字符个数进行赋值。原型:char * strncpy(char *dest, char *src, size_tn);  功能:将字符串src中最多n个字符复制到字符数组dest中(它并不像strcpy一样遇到NULL才停止复制,而是等凑够n个字符才开始复制),返回指向dest的指针。要求:如果n > dest串长度,dest栈空间溢出产生崩溃异常。该函数注意的地方和strcpy类似,但是n值需特别注意,

1)src串长度<=dest串长度,(这里的串长度包含串尾NULL字符)

如果n=(0, src串长度),src的前n个字符复制到dest中。但是由于没有NULL字符,所以直接访问dest串会发生栈溢出的异常情况。这时,一般建议采取memset将dest的全部元素用null填充,如:memset(dest,0,7)(7为从dest起始地址开始前7个位置填充null,dest可以为字符指针和数组名)。注意:char* pc="abc"; char chs[5]; sizeof(pc)为4(包含null)(有些编译器不行),sizeof(chs)为5。

如果n = src串长度,与strcpy一致。

如果n = dest串长度,[0,src串长度]处存放于desk字串,(src串长度, dest串长度]处存放NULL。

2)src串长度>dest串长度

如果n =dest串长度,则dest串没有NULL字符,会导致输出会有乱码。如果不考虑src串复制完整性,可以将dest最后一字符置为NULL。

所以,一般把n设为dest(含null)的长度(除非将多个src复制到dest中)。当2)中n=dest串长度时,定义dest为字符数组,因为这时没有null字符拷贝。

相关文章

  • 浅谈strcpy和strncpy

    strcpy和strncpy 1. strcpy函数:顾名思义字符串复制函数:原型:extern char *st...

  • strcpy

    strcpy的危险和strncpy strcpy(char* A, "a long string")r如果A在申请...

  • Strcpy & Strncpy

    Strcpy strcpy是一种C语言的标准库函数,strcpy把从src地址开始且含有'\0'结束符的字符串复制...

  • c语言字符串处理函数

    gets()fgets()puts()fputs()strlen()strcpy()strncpy()strcat...

  • strcpy/strncpy使用

    函数传入一个源字符串地址和一个目的字符串地址,将源字符串内容复制到目标字符串中,以'\0'结束。若目的字符串长度小...

  • memset, strncpy,strcpy

    memset(sensorObj->sensor_name, 0, sizeof(sensorObj->senso...

  • memcpy与memmove的区别

    memcpy和memmove都是C语言的库函数,相比于strcpy和strncpy只能拷贝字符串数组,memcpy...

  • strncpy 安全吗?

    测试一下看看,Linux 环境下,这三个函数(strcpy, strncpy, snprintf)哪个比较安全。 ...

  • memset memcpy strcpy strncpy 整理

    1>memset:1、 头文件:#include 功 能: 将s所指向的某一块内存中的每个字...

  • 字符串处理模型

    两头堵模型函数:strstrstrlen(获取字符串长度)strncpy(不替换型叠加);strcpy (替换型叠...

网友评论

    本文标题:浅谈strcpy和strncpy

    本文链接:https://www.haomeiwen.com/subject/jveghxtx.html