Я работаю на C++ с двумя большими фрагментами кода, один из которых выполнен в стиле «C» и один в стиле «C++».C++ std :: string и NULL const char *
код C-типа имеет функции, которые возвращают константный символ * и код C++ имеет во многих местах таких вещей, как
const char* somecstylefunction();
...
std::string imacppstring = somecstylefunction();
где строят строку из константного символа *, возвращаемым код типа C ,
Это работало до тех пор, пока код стиля C не изменился и не начал возвращать указатели NULL. Это, конечно, вызывает seg-ошибки.
Существует много кода, и поэтому я бы хотел максимально упростить эту проблему. Ожидаемое поведение заключается в том, что imacppstring будет пустой строкой в этом случае. Есть ли приятное, гладкое решение?
Update
Конст символ *, возвращаемый эти функции всегда указатели на статические строки. Они использовались в основном для передачи информационных сообщений (предназначенных для ведения журнала, скорее всего) о любых неожиданных действиях в функции. Было решено, что наличие этого возврата NULL на «ничего не сообщать» было хорошо, потому что тогда вы можете использовать возвращаемое значение как условные, т.е.
if (somecstylefunction()) do_something;
, тогда как раньше функция вернула статическую строку «»;
Было ли это хорошей идеей, я не буду касаться этого кода, и это все равно не для меня.
То, что я хотел избежать, - это отслеживать каждую инициализацию строки, чтобы добавить функцию обертки.
Я бы упомянул, что вы «поддерживающий», как вы говорили о нем в комментарии, может нарушить некоторые довольно важные правила стиля. Я не знаю, почему вы хотите вернуть указатель на char, если он не передается в функцию через указатель. Не могли бы вы рассказать об этом? У вас могут быть большие проблемы. –
Может ли кто-нибудь ответить, почему реализация std :: basic_string не обрабатывает указатель null value_type как пустую строку? – jmucchiello
@jmucchiello, я думаю, потому что в принципе «пустая строка» сильно отличается от указателя, который указывает на адрес памяти 0. Пустая строка '' '' фактически занимает память как единственный пустой символ. –