复制Copying
复制内存memcpy
复制内存块Copy block of memory
void * memcpy ( void * destination, const void * source, size_t num );
结果是数据的二进制副本。
该函数不检查源中的任何终止空字符 - 它总是准确地复制字节数。为避免溢出,目标和源参数指向的数组大小应至少为字节数,并且不应重叠(对于重叠的内存块,memmove 是一种更安全的方法)。
参数Parameters
- destination
- 指向目标数组的指针,类型转换为
void*
类型的指针。
- 指向目标数组的指针,类型转换为
- source
- 指向要复制的数据源的指针,类型转换为
const void*
类型的指针。
- 指向要复制的数据源的指针,类型转换为
- num
- 要复制的字节数。
size_t
是无符号整型。返回值Return Value
- 要复制的字节数。
返回目标指针。
代码语言:c 复制例子Example
#include <stdio.h>
#include <string.h>
struct {
char name[40];
int age;
} person, person_copy;
int main ()
{
char myname[] = "Pierre de Fermat";
//使用memcpy复制字符串
memcpy ( person.name, myname, strlen(myname) 1 );
person.age = 46;
//使用memcpy复制结构体
memcpy ( &person_copy, &person, sizeof(person) );
printf ("person_copy: %s, %d n", person_copy.name, person_copy.age );
return 0;
}
输出结果 person_copy: Pierre de Fermat, 46
移动内存memmove
移动内存并不会将源内存的数据清除
void * memmove ( void * destination, const void * source, size_t num );
将字节数的值从源指向的位置转到目标指向的内存块。复制就像使用了中间缓冲区一样,允许目标和源重叠。
源指针和目标指针指向的对象的基础类型与此函数无关;结果是数据的二进制副本。
该函数不检查源中的任何终止空字符 - 它总是准确地复制字节数。
为避免溢出,目标参数和源参数指向的数组的大小应至少为字节数num。
代码语言:c 复制参数和返回值与memcopy相同,功能不同
#include <stdio.h>
#include <string.h>
int main()
{
//将very useful复制到了useful后面
char str[] = "memmove can be very useful......";
memmove(str 20, str 15, 11);
puts(str);
return 0;
}
输出结果 memmove can be very very useful.
复制字符串strcpy
char * strcpy ( char * destination, const char * source );
将源指向的 C 字符串复制到目标指向的数组中,包括终止的 null 字符(并在该点停止)。
为避免溢出,目标指向的数组的大小应足够长,以包含与源相同的 C 字符串(包括终止空字符),并且不应在内存中与源重叠。
参数Parameters
- destination
- 指向要在其中复制内容的目标数组的指针。
- source
- 要复制的 C 字符串。返回值Return Value
返回目标指针。
代码语言:c 复制例子Example
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[]="Sample string";
char str2[40];
char str3[40];
strcpy (str2,str1);
strcpy (str3,"copy successful");
printf ("str1: %snstr2: %snstr3: %sn",str1,str2,str3);
return 0;
}
输出结果 str1: Sample string str2: Sample string str3: copy successful
从字符串中复制字符strncpy
char * strncpy ( char * destination, const char * source, size_t num );
从字符串中复制字符Copy characters from string
将源的第一个字符数复制到目标。如果在复制 num 个字符之前找到源 C 字符串的末尾(由 null 字符表示),则目标将填充零,直到总共写入 num 个字符为止。
参数Parameters
- destination
- 指向要在其中复制内容的目标数组的指针。
- source
- 要复制的 C 字符串。
- num
- 要从源复制的最大字符数。返回值Return Value
返回目标指针。
代码语言:c 复制例子Example
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "To be or not to be";
char str2[40];
char str3[40];
//复制到大小缓冲区(溢出安全)
strncpy(str2, str1, sizeof(str2));
//部分复制(仅 5 个字符)
strncpy(str3, str2, 5);
str3[5] = '