在一个函数的循环体中使用A2W等字符转换宏可能引起栈溢出。
alloca分配的内存是在函数的栈中分配的。而VC编译器默认的栈内存空间是2M。当在一个函数中循环调用它时就会不断的分配栈中的内存。
void WideStringToAnsi(char* strDestination, const wchar_t* wstrSource)
{
if(strDestination == NULL || wstrSource == NULL)
return;
//int nInputStrLen = wcslen (wstrSource);
int iLen = WideCharToMultiByte(CP_ACP, 0, wstrSource, -1, NULL, 0, NULL, NULL);
WideCharToMultiByte(CP_ACP, 0, wstrSource, -1, strDestination, iLen, NULL, NULL);
strDestination[iLen] = 0;
}
void AnsiStringToWide(wchar_t* wstrDestination, const char* strSource)
{
if(wstrDestination == NULL || strSource == NULL)
return;
int iLen = strlen(strSource);
MultiByteToWideChar(CP_ACP, 0, strSource, -1, wstrDestination, iLen);
wstrDestination[iLen] = 0;
}