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