wcstombs的使用

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;
这里的错误就是误认为该函数第三个参数需要数组的字节长度了。其实他是需要的数组的元素个数。



你可能感兴趣的:(String,null,delete,output)