马上开始 - 我是 C++ 的新手。
所以我正在处理这样一种情况,我有两个 char*
需要连接起来并传递给另一个方法。这应该很简单,但我就是想不通......
第一个char和getMetaData()
方法声明供引用
virtual const char *getMetaData() const = 0
char* metaChar = const_cast<char*>(result->getMetaData());
第二个字符和getUniqueTargetId()
方法声明供引用
virtual const char *getUniqueTargetId() const = 0
char* idChar = const_cast<char*>(result->getUniqueTargetId());
现在我需要将它们组合起来传递给方法 setUserData()
。这是它的声明:
virtual bool setUserData(void *userData) = 0
现在,如果我将每个 char
分别传递给 setUserData()
方法,它就可以正常工作。如果我尝试连接它们然后传递结果,它会生成 nil
或一些看起来像拉丁语的随机字符。
我尝试了以下方法(加上一些其他方法和变体):
- 将每个转换为 NSString,将它们连接起来,转换回
char
- 尝试连接两个
char
数组 - 来回转换到各种不同的事物
- 将其关闭并重新打开
- 检查了
metaChar
的类型和上面选项 1 的结果,它们对应 - 显然完全相同
同样 - 我是这些部分的新手......可能有一些明显的东西我错过了,但现在已经有几个小时了,这似乎是一个不应该占用这么多时间的问题。
最佳答案
很多讨厌的const_cast
并转换为 void*
在这里,但我假设您已获得这些方法,因此对此无能为力。
假设setUserData
获取内部传递的字符串的拷贝,然后为两个 char*
“字符串”foo
和 bar
,你可以使用
setUserData(const_cast<void*>(reinterpret_cast<const void*>((std::string(foo) + std::string(bar)).c_str())));
这里我依赖std::string
+
的重载执行串联。 c_str()
返回 const char*
并且在声明的生命周期内有效。我希望 setUserData
获取“字符串”的深层拷贝:检查函数文档。如果我不正确,那么这种方法是行不通的。请注意,我们正在转换到 void*
通过 const_cast
我不是特别喜欢,但明确说明这种事情是件好事。
如果您“拥有”所有功能,那么就放弃所有这些 char*
废话与使用std::string
从一开始。
关于c++ - 连接 2 个 char* 会产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40398094/