c++ - 连接 2 个 char* 会产生奇怪的结果

标签 c++ ios objective-c

马上开始 - 我是 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 或一些看起来像拉丁语的随机字符。

我尝试了以下方法(加上一些其他方法和变体):

  1. 将每个转换为 NSString,将它们连接起来,转换回 char
  2. 尝试连接两个 char 数组
  3. 来回转换到各种不同的事物
  4. 将其关闭并重新打开
  5. 检查了 metaChar 的类型和上面选项 1 的结果,它们对应 - 显然完全相同

同样 - 我是这些部分的新手......可能有一些明显的东西我错过了,但现在已经有几个小时了,这似乎是一个不应该占用这么多时间的问题。

最佳答案

很多讨厌的const_cast并转换为 void*在这里,但我假设您已获得这些方法,因此对此无能为力。

假设setUserData获取内部传递的字符串的拷贝,然后为两个 char* “字符串”foobar ,你可以使用

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/

相关文章:

c++ - 为什么 C++20 概念与 "const auto&"不兼容?

android - 我想知道cv error的意思

ios - 需要帮助弄清楚如何避免 iOS 中的崩溃

ios - 检测插页式广告是否正在展示

c++ - 如何在编译时调试模板参数?

ios - 如何从 UIWebView 中的 Base64 字符串加载 PDF

objective-c - 内联函数与宏

ios - EAGLContexts 共享 EAGLSharegroup 在子类化 GLKView 时给出错误

iphone - 如何创建带有字符串文字的 NSArray?

C++ 对象实例化和作用域