当前位置:问百书>生活百科>strcpy和strncpy的区别

strcpy和strncpy的区别

2024-06-19 13:52:07 编辑:join 浏览量:596

strcpy和strncpy的区别

char *strncpy(

char *strDest,

const char *strSource,

size_t count

);

char *strcpy(

char *strDestination,

const char *strSource

);

两者功能基本一样。不同之处在于,strncpy多一个参数 count,即复制的字节数

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;

//

if

((strDest==NULL)||(strSrc==NULL))

//

throw

"Invalid

argument(s)";

//

while

((*strDest++=*strSrc++)!='\0');

//

return

strDestCopy;

}

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

src="abcd";

char

dest;

这里dest的长度就至少为5。

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;

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,区别

版权声明:文章由 问百书 整理收集,来源于互联网或者用户投稿,如有侵权,请联系我们,我们会立即处理。如转载请保留本文链接:https://www.wenbaishu.com/life/423567.html
热门文章
二维码