今天用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());//写入数据
}
{
// 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);//显示数据
}