繁体   English   中英

从BSTR tp std :: string转换大字符串?

[英]Converting large strings from BSTR tp std::string?

我在BSTR中有字符串,我想使用W2CA(WideCharToMultiByte)进行转换:

USES_CONVERSION;
std::string myMBS = W2CA(myBSTR); // myBSTR is BSTR

但是,当字符串非常大时,它将在此行上引发异常“ StackOverFlowException”。

但是当我使用这个:

std::wstring myWide(myBSTR);
std::string myMBS(myWide.begin(), myWide.end());

我很好 有人可以帮忙这种行为吗?

更新 :对于大字符串,我的意思是字符串大约10MB。

atlconv.h查看W2CA的实际定义:

#define W2CA(lpw) ((LPCSTR)W2A(lpw))

现在看一下W2A的定义:

#define W2A(lpw) (\
    ((_lpw = lpw) == NULL) ? NULL : (\
            (_convert = (lstrlenW(_lpw)+1), \
            (_convert>INT_MAX/2) ? NULL : \
            ATLW2AHELPER((LPSTR) alloca(_convert*sizeof(WCHAR)), _lpw,
                         _convert*sizeof(WCHAR), _acp))))

它调用alloca ,它在堆栈上分配内存。 因此,如果字符串很长,那么很自然会冒用尽可用堆栈空间的风险。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM