strcpy、strncpy、memcpy的区别

时间:2020-11-27 07:14:22

一、strcpy、strncpy区别

struct gpInfo
{
    char gpcode[9];
    char gpName[50];
};

string gpstr = "SZ000001";
string Name = "平安银行"

gpInfo gpOne;
strncpy(gpOne.gpcode,gpstr.c_str(),8);
strncpy(gpOne.gpName,Name.c_str(),49);

//strcpy不仅复制字符串内容,还会复制字符串的结束符。
//strncpy不会自动拷贝'\0'结束符。"SZ000001"占8个字节,所以在结构体定义的时候,char gpcode[9]至少要多给一个字节为9,不然会导致乱码。

 

二、strcpy、memcpy区别

strcpy和memcpy主要有以下3方面的区别。
1、复制的内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整型、结构体、类等。
2、复制的方法不同。strcpy不需要指定长度,它遇到被复制字符的串结束符"\0"才结束,所以容易溢出。memcpy则是根据其第3个参数决定复制的长度。
3、用途不同。通常在复制字符串时用strcpy,而需要复制其他类型数据时则一般用memcpy

#define MAX_REMOETCALC 16
struct BsValInfo
{
	short		set;
	char		code[7];
	float		f[MAX_REMOETCALC];


	BsValInfo()
	{
		memset(this,0,sizeof(BsValInfo));
	}
};

string sCode = "0000001";
string sMarket = sCode.substr(0,1);
short shtMarket = atol(sMarket.c_str());
const char * stockinfo = sCode.c_str();
float f[16] = {0};
for (int i = 0; i < MAX_REMOETCALC; i++)
{
	f[i] = i;
}

BsValInfo bsone;
bsone.set = shtMarket;
strcpy(bsone.code, stockinfo+1);//strcpy
memcpy(bsone.f, f, MAX_REMOETCALC*sizeof(float));//memcpy