从CString到char [].怎么做安全

 从CString到char [].怎么做安全收藏
1.CString s1="ad";
char    s2[256];
strcpy(s2,s1);

2.strcpy(s2,s1.GetBuffer(s1.GetLength);

3.strcpy(s2,s1.GetBuffer(0);

4.for(int i=0;i<str.getlength();i++)
{
char[i]=str.get[i];
}
char[i]='/0';

5.CString 转char[]
char temp[]="2、如何将char数组里的内容copy到CString";
strcpy(m_chartocstring.GetBuffer(strlen(temp)),temp);
m_chartocstring.ReleaseBuffer();
AfxMessageBox("char数组转化为CString!是我亲自写的!",MB_OK);
UpdateData(0);

6.CString str1="PiggyXP";
char *str=new char[str.GetLength()+1];
strcpy(str,str1);

7.如果s1的长度太长会造成溢出,所以安全的方法是在使用strcpy()前先判断一下:         
CString s1="ad";
 char    s2[256];
 int len1 = s1.GetLength();
 if(len1 <= 256)
  strcpy(s2,s1.GetBuffer(0));

8.strcpy(s2,s1.GetBuffer(s1.GetLength);
s1.ReleaseBuffer();

9.strcpy(strchar,(LPSTR)(LPCTSTR)strCString); //CString---->char[]

10.如果copy的话,建议申明字符串用:
TCHAR* pBuf;  // 或者用更好的LPTSTR和LPCTSTR,他们其实是TCHAR的指针
拷贝用 _tcscpy函数,他在ansi,unicode环境下都能很好工作,避免用strcpy.

CString str; // 目标字符串
int _toUse; // 需要使用的字符个数
LPTSTR tmp = str.GetBufferSetLength(_toUse); // 得到TCHAR*
// ... 使用
str.ReleaseBuffer(); // 使用完毕

11.见过一位前辈这样写的:
CString str = "Heloo";
char *chr = new char(str.getLength()+1);
memcpy(chr,str.getLength()+1,str.getLength()+1);

memcpy是不是比strcpy安全?
学习ing...

应该是memcpy(chr,str.GetBuffer(str.getLength()),str.getLength()+1);


12.一定要注意是否为UNICODE
CString s1="ad";
int len = s1.GetLength();
char    s2[256];
memset((void*)s2,0,sizeof(char) * 256);

#ifdef _UNICODE
WideCharToMultiByte(CP_ACP,0,(LPCTSTR)s1,-1,s2,255,NULL,NULL);
#else
len = (len < 255)? len : 255;
strncpy(s2,(LPCTSTR)s1,len);
#endif
...


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值