关于内存问题 WCHAR:计算长度,与安全连接

来源:互联网 发布:政府办公室工作知乎 编辑:程序博客网 时间:2024/06/04 20:15

string WToMChar(wstring str)
{
string return_value;
//获取缓冲区的大小,并申请空间,缓冲区大小是按字节计算的
int len=WideCharToMultiByte(CP_ACP,0,str.c_str(),str.size(),NULL,0,NULL,NULL);
char *buffer=new char[len+1];
WideCharToMultiByte(CP_ACP,0,str.c_str(),str.size(),buffer,len,NULL,NULL);
buffer[len]='\0';
//删除缓冲区并返回值
return_value.append(buffer);
delete []buffer;
return return_value;
}      


WCHAR wsLine[MAX_PATH];

      //计算字符串长度

       DWORD dwLen = WideCharToMultiByte( CP_ACP, 0, wsLine, -1, 0, 0,0,0) ;
wsLine[dwLen] = L'\0';
m_buffer = (CHAR*)malloc( sizeof(CHAR) * dwLen + 1) ;
DWORD dwByteWrite = 0;
if ( m_buffer != NULL )
{
memset(m_buffer,0,sizeof(CHAR)*dwLen + 1);
strncat_s(m_buffer,  dwLen + 1, WToMChar(wsLine).c_str(), _TRUNCATE);    //安全函数连接

                WriteFile(m_file, m_buffer, lstrlenA(m_buffer) * sizeof(CHAR), &dwByteWrite, NULL);
                free( m_buffer ) ;
}

原创粉丝点击