gpt4 book ai didi

检查缓冲区中的子字符串

转载 作者:行者123 更新时间:2023-12-02 05:20:57 25 4
gpt4 key购买 nike

我使用缓冲区从串口接收数据。缓冲区的长度固定为 100,当我收到数据时,我将此数据的长度存储在一个变量(索引)中。

我想检查从 0 到 index-1 的缓冲区是否包含子字符串。

我读到我可以使用 strstr 和 strdup 来完成它,但是我有两个问题。首先,我不知道如何从缓冲区中提取一个字符串,其次,如果我不必复制该字符串,只是为了稍后在其中查找子字符串时将其删除,那就更好了。

我的变量如下:

char output[100];
int index = 0;
char* substring;

我想要一个函数,如果子字符串在输出 [0:index] 中则返回 true,否则返回 false。

任何帮助或引导将不胜感激!

编辑:我正在为 atmel µC 编写一段代码,所以我似乎仅限于 those functions .

编辑 2:实际上我似乎可以使用标准 string.h 中的所有函数

编辑 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 *);

最佳答案

根据您发布的链接,我会选择 memmem()

void *memmem(const void *s1, 
size_t len1,
const void *s2,
size_t len2);

memmem()函数在内存区域中找到长度为len2的子字符串s2第一次出现的开始s1 长度 len1

关于检查缓冲区中的子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com