strcat是对字符串的拼接,有时候拿过来用挺方便的。但是大面积用,代码变得不清晰,都不知道字符串到底编程了什么。还有另外一点,如果定义了一个全局的字符串,函数循环里需要对字符串拼接后使用,如果不停的循环,就相当于不停的追加,可能造成内存溢出,或者资源崩溃。
例子:
ID; //全局变量(CString类型)
//循环
{
char *stemp = ID.GetBuffer(ID.GetLength()+1);//CString转char*
strcat(stemp, "\r\n");
fwrite(stemp, strlen(stemp1),1,fp);
}
stemp其实是指向ID的字符串,ID每次都会加一个回车和换行。
解决方法:
ID赋值给一个局部变量:
ID; //全局变量(CString类型)
//循环
{
CString Name = ID;
char *stemp = Name.GetBuffer(Name.GetLength()+1);//CString转char*
strcat(stemp, "\r\n");
fwrite(stemp, strlen(stemp1),1,fp);
}
---------------------------------------------------------------------------------------------------------------------------------------
补充(2019-02-12):
wcscat是Unicode下的函数
用例:
TCHAR currDir[MAX_PATH];
DWORD dwRet = GetCurrentDirectory(MAX_PATH, currDir);
if (0 == dwRet)
{
//获取路径失败
}
else
{
//strcat((char*)currDir + 2*dwRet, "\\MachInfo.xml");
wcscat(currDir, _T("\\config\\MachInfo.xml"));
}