java字符串数组拷贝函数_深⼊理解可以复制数组的库函数
strcpy()和memcpy()。。。
数组不⽀持赋值的集合操作,也就是不能把⼀个数组赋给另⼀个数组,需要通过循环把数组中的每个元素赋给另⼀个数组相应的元素。但可以通过string.h中的库函数来进⾏类似功能的处理,strcpy()和strncpy()函数可以处理字符数组,memcpy()和memmove()函数提供类似的⽅法处理任意类型的数组。
strcpy()是⼀种C语⾔的标准库函数,strcpy是stringcopy的缩写。
字符串拷贝函数strcpy作用从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()使⽤的⼩实例:
运⾏结果:
程序中最后⼀次调⽤memcpy()从double类型数组中把数据拷贝到int类型数组中,这演⽰了memcpy()函数不知道也不关⼼数据类型,它只负责从⼀个位置把⼀些字节拷贝到另⼀个位置(例如,从结构中拷贝数据到字符数组中)。⽽且,拷贝过程中也不会进⾏数据转换。
附代码:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论