strcat小心使用

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

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值