C/C++ string.h库中memcpy()和memmove()的使用

  // Len_memcpy.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。

  //

  #include

  #define SIZE 10

  #include

  using namespace std;

  void PrintD(string s, int* data, int len)

  {

  printf("%s ", s.c_str());

  for (int i = 0; i < len; i++)

  {

  printf("%d ", data[i]);

  }

  printf("

  ");

  }

  void PrintD(string s, double* data, int len)

  {

  printf("%s ", s.c_str());

  for (int i = 0; i < len; i++)

  {

  printf("%.2lf ", data[i]);

  }

  printf("

  ");

  }

  int main()

  {

  int nValues[SIZE] = { 1,2,3,4,5,6,7,8,9,10 };

  double dValues[SIZE] = { 1.1, 2.2, 3.3, 4.4, 5.5,6.6,7.7,8.8,9.9, 0.1 };

  int memcpyN[SIZE] = {0}; // 使用memcpy拷贝数据到这里

  double memcpyD[SIZE] = {0.0};

  int memmoveN[SIZE] = { 0 }; // 使用memmove拷贝数据到这里

  double memmoveD[SIZE] = { 0.0 };

  printf(" copy before:

  ");

  PrintD("Values ", nValues, SIZE);

  PrintD("dValues ", dValues, SIZE);

  PrintD("targetN ", memcpyN, SIZE);

  PrintD("targetD ", memcpyD, SIZE);

  printf("

  after memcpy copy:

  ");

  memcpy(memcpyN, nValues, sizeof(int)*SIZE);

  memcpy(memcpyD, dValues, sizeof(int)*SIZE); // double比size占位宽,这里会丢失数据

  PrintD("Values ", nValues, SIZE);

  PrintD("dValues ", dValues, SIZE);

  PrintD("memcpyN ", memcpyN, SIZE);

  PrintD("memcpyD ", memcpyD, SIZE);

  printf("

  after memmove copy:

  ");

  memcpy(memmoveN, nValues, sizeof(int)*SIZE);

  memcpy(memmoveD, dValues, sizeof(double)*SIZE); // 这里不会再丢失数据

  PrintD("Values ", nValues, SIZE);

  PrintD("dValues ", dValues, SIZE);

  PrintD("memmoveN", memmoveN, SIZE);

  PrintD("memmoveD", memmoveD, SIZE);

  }