本文主要是介绍谨慎使用A2W等字符转换宏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
在一个函数的循环体中使用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;
}
这篇关于谨慎使用A2W等字符转换宏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!