У меня есть массив символов в C, который может иметь значение, такое как /path/example/abc
. Я хочу, чтобы все символы после части /path/example/
были поглощены, перераспределяя строку для своего нового размера. Есть ли стандартная функция или функция, которую вы могли бы написать, которая может это сделать? Возможно, это может быть выполнено с помощью библиотеки, такой как PCRE? Примечание: Чистый, независимый от платформы C-код будет оценен по достоинству.Pure C: обрезать все символы в строке после появления слова
Пример:
int main()
{
char str[100] = "I am a string";
newStr = globbleAfter(str, "I am a");
printf("%s\n", newStr);
return 0;
}
//=> "I am a"
Buck, ваш символ [MAX_PATH] будет выделять строку в стек, где он будет перезаписан как только вызывающая функция вызывает что-то другое. На ваш вопрос «когда я освобожу выделенную память?»: Я этого не делаю. Вызывающий отвечает за это, когда ему больше не нужна строка, очевидно, что функция не может знать, когда. Я также не могу освободить исходную строку, поскольку это, возможно, даже не было * x * alloc'ed в первую очередь. –
Гунтрам, вы правы. gobbled_string будет выделено в стеке и будет перезаписано, что является моей ошибкой. Обычно, когда я создаю эти небольшие вспомогательные функции, я стараюсь держаться подальше от выделения памяти, которую я не освобождаю, поэтому пользователю не нужно отслеживать память, которую они не выделяют. – 109
Вы правы, когда пытаетесь избежать этого, потому что слишком просто вводить утечки памяти таким образом. Я согласен с тем, что «пользователь должен освободить возвращенную строку, когда он перестает ее использовать» относится к документации для таких функций. К сожалению, реальной альтернативы нет, поскольку вызывающий абонент не знает длину возвращаемой строки, поэтому вы не можете просто предоставить ему строку с соответствующим распределением. Подобные вещи, вы не можете преуспеть, вы можете просто попытаться решить, какое зло является наименее. –