我应该使用哪种解决方案在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/