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);
}