strcpy_s()函数有两个版本:三个参数版本和两个参数版本,如下:
三个参数时:
errno_t strcpy_s(
char *strDestination,
size_t numberOfElements,
const char *strSource
);
两个参数时:
errno_t strcpy_s(
char (&strDestination)[size],
const char *strSource
); // C++ only
以下重点讨论三个参数版本。
使用时一定要注意:第二个参数numberOfElements一定要大于源空间strSource 的大小。否则Debug版本会弹框,release版本会直接奔溃。
比如
LPSTR l_pcDest = (char*)malloc(6);
char l_acPhyPosName[6] = { 0 };
sprintf_s(l_acPhyPosName, “HOP05”);
strcpy_s(l_pcDest, 6/这里不能为5,必须大于等于strlen(l_acPhyPosName)+1/, l_acPhyPosName);
但是,memcpy_s中的第二个参数是需要大于等于strlen(l_acPhyPosName)。(不是大于等于strlen(l_acPhyPosName)+1哦)如下:
LPSTR l_pcDest = (char*)malloc(6);
char l_acPhyPosName[6] = { 0 };
sprintf_s(l_acPhyPosName, “HOP03”);
memcpy_s(l_pcDest, 5/DestLen/, l_acPhyPosName, 5/SourceLen/);
//总结:strcpy_s与memcpy_s的区别:
//strcpy_s是字符串的拷贝,源是包括有\0的,所以目标长度一定要大于等于strlen(源)+1,而memcpy_s是内存考虑,只要目标长度大于等于源长度就可以,不需要+1.
//所以,为了避免记混乱,能用memcpy_s的地方,就不要用strcpy_s.