Поскольку кучи звонков будут довольно дорогими, очевидная оптимизация заключается в том, чтобы их избежать.
Если вам нужно делать это часто, возможно, вы можете найти какую-нибудь простую оболочку вокруг голого указателя, который может выразить это.
Что-то вроде:
typedef struct {
const char *chars;
size_t offset;
} mystring;
Тогда вы должны были бы разработать API для преобразования mystring *
в символьный указатель, путем добавления смещения:
const char * mystring_get(const mystring *ms)
{
return ms->chars + ms->offset;
}
и конечно функцию создайте суффикс, где удаляется 1-й символ:
mystring mystring_tail(const mystring *ms)
{
const mystring suffix = { ms->chars, ms->offset + 1};
return suffix;
}
обратите внимание, что mystring_tail()
возвращает новую строковую структуру по значению, чтобы избежать распределения кучи.
Примечание: этот код имеет UB, если 'value' is" ". – chux