我应该使用哪种解决方案在C ++中通过dll边界将std :: string的某些内容深度复制到char *?


memcpy(szValue, value.c_str(), value.size())


要么


strncpy_s(szValue, strlen(szValue), value.c_str(), value.length())


从外部调用的dll中的方法:

unsigned int Interface::GetProp(const char* const szName, char* szValue)
{
    // ...

}


我也尝试过:

std::string value = m_xmlParser.GetNodeValue(propName);
std::vector<char> propValue(value.begin(), value.end());
propValue.push_back('\0');
szValue = &propValue[0];


但这只是一个浅表副本(离开dll后,char *数组为空)

memcpy和strncpy_s不是C ++函数,但是可以在这里使用吗?

谢谢

最佳答案

如果我正确理解它,则尝试以这种方式实现GetProp:

unsigned int Interface::GetProp(const char* const szName, char* szValue)
{
    std::string value = m_xmlParser.GetNodeValue(propName);
    std::vector<char> propValue(value.begin(), value.end()); //propValue is on stack, mistake 1
    propValue.push_back('\0');
    szValue = &propValue[0];
}


在这行szValue = &propValue[0];上,您正在使szValue指向该函数将返回时将被删除的内存-错误2,最大的error(3)是您正在修改局部变量-szValue指针char是本地的...

unsigned int Interface::GetProp(const char* const szName, char* szValue)
{
    std::string value = m_xmlParser.GetNodeValue(propName);
    memcpy(szValue, value.c_str(), value.length()+1);
    return ... whatever you want to ...
}


如何调用GetProp:

char buffer[MAX_SIZE_AS_PER_INTERFACE_API];
GetProp(propName, buffer);

关于c++ - 将std::string深度复制到char *的正确方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24731104/

10-12 01:33