Есть ли версия strstr, которая работает с фиксированной длиной памяти, которая может включать нулевые символы?
Я мог бы сформулировать свой вопрос так: strncpy для memcpy, как strstr для?
Есть ли версия strstr, которая работает с фиксированной длиной памяти, которая может включать нулевые символы?
Я мог бы сформулировать свой вопрос так: strncpy для memcpy, как strstr для?
memmem, к сожалению, он специфичен для GNU, а не для стандартного C. Однако он имеет открытый исходный код, поэтому вы можете скопировать код (если лицензия вам подходит).
Нет в стандартной библиотеке (которая не так уж велика, так что взгляните). Однако написать свой собственный - тривиально, либо напрямую побайтно, либо с помощью memchr (), за которым следует memcmp () итеративно.
strstr()
обязательно тривиальна; просто то, что функциональность, требуемая OP, может быть тривиально реализована, даже если обычно оптимальное решение не так. Реализации стандартных библиотек должны быть в высшей степени оптимизированы, поскольку их применение заранее не известно. При написании кода, специфичного для приложения, он должен быть достаточно быстрым (или маленьким) только для удовлетворения потребностей приложения. В этом конкретном случае реализация, подобная вашему примеру, может быть неоправданной.
- person Clifford; 10.09.2015
В стандартной библиотеке нет. Однако быстрый поиск в Google по запросу "безопасная библиотека строк c" дает несколько потенциально полезных результатов. Не зная больше о задаче, которую вы пытаетесь выполнить, я не могу рекомендовать какую-либо конкретную стороннюю реализацию.
Если это единственная «безопасная» функция, которая вам нужна помимо стандартных функций, то, возможно, лучше использовать собственную, чем тратить усилия на интеграцию сторонней библиотеки, при условии, что вы уверены, что можете сделать это, не вводя дополнительные ошибки.
strncpy()
(и, действительно, strlcpy()
), мне показалось целесообразным обратиться к моему ответу с этого направления, поскольку другие ответы уже охватывали другие подходы. Я попытался отметить это, заявив, что не зная больше о задаче ... Я не могу рекомендовать какую-либо конкретную стороннюю реализацию. Возможно, я мог бы быть более ясным.
- person Adam; 02.01.2010