Я использую буфер для приема данных из последовательного порта. Буфер имеет фиксированную длину, которая равна 100, и когда я получаю данные, я сохраняю длину этих данных в переменной (индексе).Проверка подстроки в буфере
Я хотел бы проверить, содержит ли буфер от 0 до индекса-1 подстроку.
Я читал, что могу сделать это с помощью strstr и strdup, но у меня есть две проблемы с этим. Сначала я не знаю, как извлечь строку из буфера, а во-вторых, было бы лучше, если бы мне не пришлось копировать строку, чтобы просто удалить ее на одну строку позже, когда я ищу подстроку в ней.
Мои переменные являются следующие:
char output[100];
int index = 0;
char* substring;
И я хотел бы функцию, которая возвращает истину, если подстрока на выходе [0: индекс] и ложь в противном случае.
Любая помощь или руководство были бы очень оценены!
Редактировать: Я пишу фрагмент кода для atmel μC, поэтому кажется, что я ограничен those functions.
Edit 2: На самом деле, кажется, что я могу использовать все функции из стандартной string.h
Edit 3: Я проверил точно в моих зависимости и под все функциями я могу позвонить.
extern int ffs (int __val) __ATTR_CONST__;
extern int ffsl (long __val) __ATTR_CONST__;
extern int ffsll (long long __val) __ATTR_CONST__;
extern void *memccpy(void *, const void *, int, size_t);
extern void *memchr(const void *, int, size_t) __ATTR_PURE__;
extern int memcmp(const void *, const void *, size_t) __ATTR_PURE__;
extern void *memcpy(void *, const void *, size_t);
extern void *memmem(const void *, size_t, const void *, size_t) __ATTR_PURE__;
extern void *memmove(void *, const void *, size_t);
extern void *memrchr(const void *, int, size_t) __ATTR_PURE__;
extern void *memset(void *, int, size_t);
extern char *strcat(char *, const char *);
extern char *strchr(const char *, int) __ATTR_PURE__;
extern char *strchrnul(const char *, int) __ATTR_PURE__;
extern int strcmp(const char *, const char *) __ATTR_PURE__;
extern char *strcpy(char *, const char *);
extern int strcasecmp(const char *, const char *) __ATTR_PURE__;
extern char *strcasestr(const char *, const char *) __ATTR_PURE__;
extern size_t strcspn(const char *__s, const char *__reject) __ATTR_PURE__;
extern char *strdup(const char *s1);
extern size_t strlcat(char *, const char *, size_t);
extern size_t strlcpy(char *, const char *, size_t);
extern size_t strlen(const char *) __ATTR_PURE__;
extern char *strlwr(char *);
extern char *strncat(char *, const char *, size_t);
extern int strncmp(const char *, const char *, size_t) __ATTR_PURE__;
extern char *strncpy(char *, const char *, size_t);
extern int strncasecmp(const char *, const char *, size_t) __ATTR_PURE__;
extern size_t strnlen(const char *, size_t) __ATTR_PURE__;
extern char *strpbrk(const char *__s, const char *__accept) __ATTR_PURE__;
extern char *strrchr(const char *, int) __ATTR_PURE__;
extern char *strrev(char *);
extern char *strsep(char **, const char *);
extern size_t strspn(const char *__s, const char *__accept) __ATTR_PURE__;
extern char *strstr(const char *, const char *) __ATTR_PURE__;
extern char *strtok(char *, const char *);
extern char *strtok_r(char *, const char *, char **);
extern char *strupr(char *);
«Индексы» - это множественное число «индекс», потому что оно латинское. Единственная форма все еще «указана» :) –
@carlosdc Я отредактировал вопрос, подстрока не имеет длину 1. H2CO3 Извините, что я французский, поэтому иногда я смешиваю между французским и английским в моем коде. – Leo
Звучит для меня как 'strnstr' - это то, что вы хотите. http://www.kernel.org/doc/htmldocs/kernel-api/API-strnstr.html – Michael