c++ - 字符串神秘消失,将字符串从 C++ 带到 Obj C++

标签 c++ objective-c xcode nsstring objective-c++

我确定这很简单,但我似乎无法弄明白。我基本上是在尝试使用 C++ 生成 HTML 字符串并将其返回以存储在 Objective-C 模型类中,以便稍后在 Web View 中使用。

它的 C++ 端似乎运行良好。这是在 cpp 文件中调用的方法:

const char *SqliteConnection::htmlTest(){
    HtmlItemValueTableBuilder htmlBuilder = HtmlItemValueTableBuilder();
    std::string s = htmlBuilder.test();
    cout << "TEST RESULT: " <<s;
    return s.c_str();
}

cout 产生以下输出(这是我想要的):

TEST RESULT: <!doctype html><html><head></head><div><STYLE type="text/css"> body {      margin: 10%;  }  table {    border-spacing: 5px;  }  td {     background-color: #EFEFEF;    font-size: 20px;    padding: 4px;    padding-left: 4px;    padding-right: 4px;  }  tr {    margin-bottom: 10px;    margin-top: 10px;  } </STYLE><table><thead></thead><tbody>
<tr><td>hello</td><td>world</td></tr>
</tbody></table></div></html>

下面是在单独的 Objective c++ (.mm) 文件中调用它的代码:

-(NSString *)getFieldsMapAsHtmlForResult:(Result *)result {
    const char *s = _sqliteConnection->htmlTest();
    NSLog(@"Before Conversion: %s", s);
    NSString *htmlString = [NSString stringWithUTF8String:s];
    NSLog(@"After Conversion: %@",htmlString);
    return htmlString;
}

我看到很多人推荐使用 stringWithUTF8String 将 c 字符串转换为 NString。这在过去对我有用,但由于某种原因,在 NSLog 输出中,我没有得到任何返回。字符串神秘地消失了。

您能否推荐可能导致此问题的原因?

-----更新---- 按照 Retired Ninja 的建议,我试图确保引用的指针不是指向超出范围的变量。我有一个结果模型 c++ 类,我成功地传递给我的 obj c++ 代码。我决定添加一个数据成员 fields_map_as_html,并将函数传递给它而不是我的 obj-C++ 代码。

最佳答案

SqliteConnection::htmlTest() 正在返回指向超出范围的局部变量的指针,因此它不再有效。您可以改为返回一个 `std::string 并在调用函数中提取数据,或者使用其他方法来确保数据在您使用它之前一直存在。

关于c++ - 字符串神秘消失,将字符串从 C++ 带到 Obj C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20752918/

相关文章:

ios - 在 NSOperation 中设置 UIImage 时内存泄漏

iPhone 项目未运行(多次)

c++ - LPBYTE 数据到 MFC 中的 CString

C++ 常量错误

C++:使用 C++14 通用 lambda boost fusion fold

c++ - 如何将对象类的方法作为 std::function 传递?

iphone - 关于 UITableView

ios - 是否需要将项目迁移到 iOS 7?

objective-c - 在 Xcode 4 中是否有添加属性的快捷方式?

ios - 快速相机覆盖 View