Ну, p
не указывает на строку с нулем в конце, если get_string()
возвращает NULL; в этом и заключается проблема, поскольку конструкторы std::string
, которые принимают указатель на C-строку с 0-концом, не могут иметь дело с NULL, которая является такой же C-строкой с 0-символом, как два десятка бананов.
Итак, если get_string()
является вашей собственной функцией, в отличие от библиотечной функции, то, возможно, вам следует убедиться, что она не может возвратить NULL. Например, вы можете позволить ему вернуть искомое std::string
само, так как оно знает свое собственное состояние. В противном случае я бы сделал это, используя Cleanup
из этого ответа в качестве помощника, чтобы гарантировать, что p
не может просочиться (как предложил Мартин Йорк в комментарии):
string foo()
{
const char* p = get_string();
const Cleanup cleanup(p);
const std::string str(p != NULL ? p : "");
return str;
}