C++ 字符串从C++;至Obj C++;

C++ 字符串从C++;至Obj C++;,c++,objective-c,xcode,nsstring,objective-c++,C++,Objective C,Xcode,Nsstring,Objective C++,我相信这很简单,但我似乎不明白。基本上我试图用C++来生成HTML字符串,并将其返回到一个目标C模型类中,以便以后在Web视图中使用。 它的C++边看起来运行良好。以下是在cpp文件中调用的方法: const char *SqliteConnection::htmlTest(){ HtmlItemValueTableBuilder htmlBuilder = HtmlItemValueTableBuilder(); std::string s = htmlBuilder.test

我相信这很简单,但我似乎不明白。基本上我试图用C++来生成HTML字符串,并将其返回到一个目标C模型类中,以便以后在Web视图中使用。 <>它的C++边看起来运行良好。以下是在cpp文件中调用的方法:

const char *SqliteConnection::htmlTest(){
    HtmlItemValueTableBuilder htmlBuilder = HtmlItemValueTableBuilder();
    std::string s = htmlBuilder.test();
    cout << "TEST RESULT: " <<s;
    return s.c_str();
}
我看到很多人建议使用stringWithUTF8String将c字符串转换为NString。这在过去对我有效,但由于某种原因,在NSLog输出中,我没有得到任何返回。绳子神秘地消失了

你能告诉我是什么原因造成的吗

-----更新----
按照退休忍者的建议,我试图确保引用的指针没有指向超出范围的变量。我有一个结果模型C++类,我成功地传递给了我的ObjC++代码。我决定添加一个数据成员,字段映射为html,并让函数传递给该成员,而不是我的obj-C++代码。

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

您返回的是一个指向立即超出范围的局部变量的指针。此外,stringWithUTF8String仅在您确定传递的是UTF8文本时才适用。@StilesCrisis-我以前读过,但我不确定如何验证传递的内容。有什么建议吗?@RetiredNinja-谢谢,你的建议奏效了。我在问题中添加了一个更新,以显示我是如何利用它的。如果你想从你的回复中得到答案,我会接受它。如果你不知道字符串的编码,你应该弄清楚:)如果你的源代码是“任意HTML页面”,那么编码可以是任意内容。编码应该在HTML头部的元标记中指定。如果您没有任何线索,UTF8是一个错误的猜测,因为它可能会失败并给您一个空字符串。大多数编码都无法识别随机/不正确的字符,这是错误的,但通常没有空字符串那么糟糕。
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>
-(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;
}