java字符串数组拷贝函数_深入理解可以复制数组的库函数strcpy()和memcpy()的一些细节...

数组不支持赋值的集合操作,也就是不能把一个数组赋给另一个数组,需要通过循环把数组中的每个元素赋给另一个数组相应的元素。但可以通过string.h中的库函数来进行类似功能的处理,strcpy()和strncpy()函数可以处理字符数组,memcpy()和memmove()函数提供类似的方法处理任意类型的数组。

strcpy()是一种C语言的标准库函数,strcpy是stringcopy的缩写。

从src地址开始拷贝包括''结束符在内的字符串到以dest开始的地址空间,返回值的类型为char*。

memcpy()是c和c++使用的内存拷贝函数,memcpy是memorycopy的缩写。

从源src所指的内存地址的起始位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中。

strcpy()复制包括字符串的结束符''在内的字符数组。

memcpy()提供了一般内存的复制,即memcpy对于需要复制的内容没有限制,因此用途更广。

另两个功能相似、但接口不同的函数:

char*strncpy(char*dest,constchar*src,intn);

把src所指向的字符串中以src地址开始的前n个字节复制到dest所指的数组中,并返回被复制后的dest。

void*memmove(void*dest,constvoid*src,size_tcount);

memmove()用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中,拷贝过程类似于先把字节拷贝到一个临时缓冲区,然后再拷贝到最终目的地,但复制后src内容会被更改。与memmove()不同的是,memcpy是假设两个内存区域之间没有重叠,如果有重叠,则其行为是未定义的,这意味着函数有可能会失败。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。

memcpy()和memmove()两个函数被设计用于处理任何数据类型,所以它们的参数都是两个指向void的指针。C允许把任何类型的指针赋给void*类型的指针。如此宽容导致函数无法知道待拷贝数据的类型。因此,这两个函数使用第3个参数指明待拷贝的字节数。注意,对数组而言,字节数一般与元素个数不同。如果要拷贝数组中10个double类型的元素,要使用10*sizeof(double),而不是10.

下面是strcpy()的小实例代码:

下面是memcpy()和memmove()使用的小实例:

7d5e2e56107a03d2c80716648b837a3a.png

运行结果:

程序中最后一次调用memcpy()从double类型数组中把数据拷贝到int类型数组中,这演示了memcpy()函数不知道也不关心数据类型,它只负责从一个位置把一些字节拷贝到另一个位置(例如,从结构中拷贝数据到字符数组中)。而且,拷贝过程中也不会进行数据转换。

附代码:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值