字符串复制函数小结

在C++中,提供了若干个字符串复制函数。
1、char * strcpy(char* destination,const char * source);

2、char* strncpy(char* destination,const char* source,size_t num);

3、void * memcpy(void* destination,const void* source,size_t num);

4、void * memmove(void* destination,const void* source,size_t num);

5、void *memset(void *s, char ch, unsigned n);

6、int sprintf( char *buffer, const char *format, [ argument] … );
功能及用法说明:

1、strcpy:将由source指针指示的字符串(包括结尾字符)复制到destination指针指示的区域中,连字符串结束标志也一起复制,复制到null字符就结束了。。该函数不允许source和destination的区域有重叠,同时,为了避免溢出,destination区域应该至少和source区域一样大。

2、strncpy:复制source的前num字符到destination。如果遇到null字符(’\0’),且还没有到num个字符时,就用(num - n)(n是遇到null字符前已经有的非null字符个数)个null字符附加到destination。注意:并不是添加到destination的最后,而是紧跟着由source中复制而来的字符后面。下面举例说明:

char des[] = “Hello,i am!”;

char source[] = “abc\0def”;

strncpy(des,source,5);

此时,des区域是这样的:
这里写图片描述
\0,\0并不是添加在!的后面。

3、memcpy:内存拷贝,实现 将一个 内存块 的内容复制到另一个 内存块 这一功能。当字符串类型时,将source区域的前num个字符复制到destination中。该函数不检查null字符(即将null字符当作普通字符处理),意味着将复制num个字符才结束。该函数不会额外地引入null字符,即如果num个字符中没有null字符,那么destination中相应字符序列中也没有null字符。同strcpy的区别:允许将source中null字符后面的字符也复制到destination中,而strcpy和strncpy则不可以。

4、memmove:同memcpy完成同样的功能,区别是,memmove允许destination和source的区域有重叠。而其他三个函数不允许。

例子:char str[] = “This is a test!”;

memmove(str+2,str+10,4);

此时,str变成:Thtests a test!

5、功 能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值。这儿把memset()函数叫做字符串复制函数有点不妥。
void *memset(void *s, char ch, unsigned n);
void *memset(void *s,int c,size_t n)
:将已开辟内存空间 s 的首 n 个字节的值设为值 c。
两种函数定义,对相应内存空间改为某个字符或数字。

6、功能:把格式化的数据写入某个字符串缓冲区。返回写入buffer 的字符数,出错则返回-1. 如果 buffer 或 format 是空指针,且不出错而继续,函数将返回-1,并且 errno 会被设置为 EINVAL。sprintf 返回被写入buffer 的字节数,结束字符‘\0’不计入内。即,如果“Hello”被写入空间足够大的buffer后,函数sprintf 返回5。[]中的部分是可选的。最常用功能是将整数转换成字符串。和itoa()函数功能类似。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值