Converts a sequence of wide characters to a corresponding sequence of multibyte characters.
size_t wcstombs( char *mbstr, const wchar_t *wcstr, size_t count );
Parameters
-
mbstr
- The address of a sequence of multibyte characters. wcstr
- The address of a sequence of wide characters. count
The maximum number of bytes that can be stored in the multibyte output string.
他的使用很简单。但是在第三个参数的使用的时候经常会出错。
coverity会报告一个潜在的越界错误。
std::string fullpathFilename;
const unsigned int nMaxPathLen = 255;
wchar_t szPath[nMaxPathLen + 1] = {0};
GetModuleFileName(NULL, szPath, nMaxPathLen);
wchar_t *p = wcsrchr(szPath, '\\');
*p = 0;
unsigned int _Dsize = (nMaxPathLen + 1) * 2; //错误
char *_Dest = new char[_Dsize];
memset(_Dest,0,_Dsize);
wcstombs(_Dest,szPath,_Dsize);
fullpathFilename.append(_Dest);
fullpathFilename.append("\\MemoryDRLocation");
delete[] _Dest;
_Dest = NULL;
这里的错误就是误认为该函数第三个参数需要数组的字节长度了。其实他是需要的数组的元素个数。