gpt4 book ai didi

c++ - 返回具有 const char* 属性的结构

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

在这个包装器方法中,我返回一个DN_OPstruct,它有两个const char* 属性:TargetNode_IdentifierName。对于 p/invoke,我必须继续使用 const char* - 类型,std::string 将不起作用:

DN_OPstruct getDnOperationIntern(const char* charGuid){
DN_OPstruct op;
UA_OPstruct _op;
_op = GetOPData(charGuid);
op.direction = _op.direction;
op.Name = _op.Name.toUtf8();
op.TargetNode_Identifier = _op.TargetNode_Identifier.toUtf8();
op.TargetNode_NamespaceIndex = _op.TargetNode_NamespaceIndex;
op.Type_of_OP = _op.Type_of_OP;
return op ;
}

正如我所读,您必须 strcpy const char*s 。没有这样的帮助,属性的指针将失去它们的引用,我得到错误的属性。 strcpy 示例:

strcpy(new char[output.size()], output.c_str());

如何在我的方法中实现它?

最佳答案

你不应该在你的方法中实现它 - 相反,你应该在一个单独的函数中实现它,并在你需要复制字符串的所有地方使用它:

char *copyCString(const string& s) {
char *res = new char[s.size()+1]; // Add 1 for null terminator
strcpy(res, s.c_str());
return res;
}

现在您可以使用此功能根据需要制作拷贝:

op.Name = copyCString(_op.Name); 
op.TargetNode_Identifier = copyCString(_op.TargetNode_Identifier);

你也可以从 const char* 开始:

char *copyString(const char* s) {
char *res = new char[strlen(s)+1]; // Add 1 for null terminator
strcpy(res, s);
return res;
}

现在你这样调用它:

op.Name = copyString(_op.Name.toUtf8()); 
op.TargetNode_Identifier = copyString(_op.TargetNode_Identifier.toUtf8());

当然,您有责任在完成后删除拷贝:

delete[] op.Name;
delete[] op.TargetNode_Identifier;

为此定义一个函数也是个好主意:

void freeCopiedString(char *s) {
delete[] s;
}

关于c++ - 返回具有 const char* 属性的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27486603/

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