цель c — строка таинственным образом исчезает, перенося строку из C ++ в Obj Stack Overflow

Я уверен, что это что-то простое, но я не могу понять это. Я в основном пытаюсь использовать c ++ для создания строки HTML и вернуть ее для хранения в классе целевой модели c, который будет использоваться позже в веб-представлении.

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 я ничего не получил. Струна просто таинственно исчезает.

Не могли бы вы порекомендовать, что может быть причиной этого?

—— ОБНОВИТЬ —-
Следуя совету отставного ниндзя, я попытался убедиться, что указатель, на который ссылаются, не относится к переменной, выпадающей из области видимости. У меня был класс с ++ модели Result, который я успешно передавал в свой код obj c ++. Я решил добавить элемент данных fields_map_as_html и передать эту функцию вместо моего кода obj-C ++.

0

Решение

SqliteConnection::htmlTest() возвращает указатель на локальную переменную, которая выходит из области видимости, поэтому она больше не действительна. Вместо этого вы могли бы вернуть `std :: string и извлечь данные в вызывающей функции или использовать какой-либо другой метод, чтобы убедиться, что эти данные зависают до тех пор, пока вы их не используете.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]