strcpy_s 与 strcpy 的用法

今天用MFC的内存映射,发现拷贝出现了问题,减少写入数据,输出显示数据会乱码。。。现问题解决记录分享下。。。。
errno_t strcpy_s(char *strDestination,size_t numberOfElements,const char *strSource );
各参数的意思如下:
strDestination:目标字符串缓冲区的位置
numberOfElements:目标字符串缓冲区的大小(注意,是目标)
strSource :终止的源字符串缓冲区
strcpy(char *strDestination,const char *strSource );参数少一个,但是没有strcpy_s,安全。。
由于我写的代码里目标字符串缓冲区的大小不固定,我获取的是源字符串大小2倍再加1,测试通过,这样就可以实现不固定长度的拷贝。实例如下:
void CCShareMemDlg::OnBnClickedWrite()
{
 // TODO: 在此添加控件通知处理程序代码
 CString str;
 m_Write.GetWindowTextW(str);
 str += _T("\0");
 int a=str.GetLength();
 //char* m_pViewData = NULL;
 strcpy_s((char*)m_pViewData, a*2+1,(CT2A)str.GetBuffer());//写入数据
}


void CCShareMemDlg::OnBnClickedRead()
{
 // TODO: 在此添加控件通知处理程序代码
 CString str;
 char name[50];
 strcpy_s(name, (char*)m_pViewData);//读取共享内存数据
 str = CString(name);
 m_Read.SetWindowTextW(str);//显示数据
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值