gpt4 book ai didi

c++ - 将 std::string 深度复制到 char* 的正确方法

转载 作者:行者123 更新时间:2023-11-28 06:47:18 25 4
gpt4 key购买 nike

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

  • 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,以及最大的错误 (3)最重要的是您正在修改局部变量 - 指向 char 的 szValue 指针是局部的...

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com