Кто-нибудь создал общую библиотеку, реализующую функции string.h, но использующую структуру вместо char *
для передачи строк?
Я сделал.
11 лет назад, когда я учился C: я переопределил всебиблиотека, гарантируя, что перераспределения использовались всякий раз, когда в строке требовалось больше места.
Но тогда это было для целей обучения (так как тогда я перешел на C ++ и теперь использую std :: string).
есть ли конкретная причина, по которой это было бы плохой идеей?
Я думаю, это может быть хорошей идеей попробовать сами: таким образом, используя правильный API,Вы можете запомнить вдоль строки как ее длину, так и размер буфера, возможно, даже счетчик ссылок, если вы хотите попробовать поиграть с концепциями копирования при записи.Ваша строка будет более сложной, но в некоторых случаях более эффективной, чем стандартная.И это хороший опыт обучения.
Но для производственного кода, как всегда, либо вы очень опытный человек, либо вы должны попытаться найти библиотеку, которая сделает это лучше, чем вы.
Я знаю некоторые готовые к реализации реализации, использующие эту альтернативную строку.
Mat уже упоминал GString GLib.
Если вы программируете для Windows, Microsoft BSTR (и его оболочка C ++ bstr_t ) могут решить вашу проблему: их можно прочитать как строку const char *
, и они используют SysAllocString и его дочерние функции, SysFreeString и т. Д.
Вы можете использовать их для производственного кода или в учебных целях, учиться у них.