size_t strlen(const char *str)
功能:返回字符串长度
size_t strnlen(const char *str, size_t maxlen)
功能:返回字符串长度,如果长度大于maxlen,返回maxlen
void *memset(void *s, int c, size_t count)
功能:将s指向的地址,连续count,设置为c。(注意步进为sizeof(char))
char *strcat(char *dest, const char *src)
功能:将源字符串拼接到目标字符串后面
char *strncat(char *dest, const char *src, size_t count)
功能:将源字符串拼接到目标字符串后面,指定最多拷贝长度
char *strlcat(char *dest, const char *src, size_t count)
功能:将源字符串拼接到目标字符串后面,指定目标缓冲区总大小为count
函数实现:
size_t strlcat(char *dest, const char *src, size_t count)
{
size_t dsize = strlen(dest);
size_t len = strlen(src);
size_t res = dsize + len;
/* This would be a bug */
BUG_ON(dsize >= count);
dest += dsize;
count -= dsize;
if (len >= count)
len = count-1;
memcpy(dest, src, len);
dest[len] = 0;
return res;
}
int strncasecmp(const char *s1, const char *s2, size_t len)
功能:不区分大小写、限制长度的字符串比较
int strcasecmp(const char *s1, const char *s2)
功能:不区分大小写的字符串比较
int strcmp(const char *cs, const char *ct)
功能:比较两个字符串
int strncmp(const char *cs, const char *ct, size_t count)
功能:比较指定长度的两个字符串
__visible int memcmp(const void *cs, const void *ct, size_t count)
功能:比较指定长度的两片内存区域内容是否相等
bcmp–>memcmp
# define __visible __attribute__((__externally_visible__))
char *strcpy(char *dest, const char *src)
功能:将源字符串拷贝到目的地址,空字符结束
可能存在目标地址内存空间小,内存访问越界
char *strncpy(char *dest, const char *src, size_t count)
功能:将源字符串拷贝到目的地址,空字符或者拷够count个字符结束
不会主动在拷贝完加尾0
void *memcpy(void *dest, const void *src, size_t count)
功能:从源空间拷贝count大小的目标空间
void *memmove(void *dest, const void *src, size_t count)
功能:从源空间拷贝count大小的目标空间
与memcpy()不同,memmove()可以处理重叠区域
在实现中如果dest<src,则正向copy,否则从后向前copy,防止有重叠区
size_t strlcpy(char *dest, const char *src, size_t size)
功能:将一个字符串拷贝到目标缓冲区
在缓冲区大小size不为0时进行拷贝,最多拷贝size-1个字符,最后添加一个尾\0,
char *stpcpy(char *__restrict__ dest, const char *__restrict__ src)
功能:字符串拷贝
区别于strcpy在返回值上,stpcpy返回目标字符串的末尾地址。
char *strdup(const char *str)
功能:将传入字符串,拷贝一份返回
注意:返回的地址是在函数内部有malloc的,使用完记着free
函数实现位置:source/tools/include/nolibc/string.h
static __attribute__((unused))
char *strndup(const char *str, size_t maxlen)
{
size_t len;
char *ret;
len = strnlen(str, maxlen);
ret = malloc(len + 1);
if (__builtin_expect(ret != NULL, 1)) {
memcpy(ret, str, len);
ret[len] = '\0';
}
return ret;
}
char *strndup(const char *str, size_t maxlen)
和strdup一样,不过多指定了一个最大长度
char *strchr(const char *s, int c)
功能:在给定字符串查找是否存在字符c,存在则返回首次出现的位置,不存在返回NULL
char *strrchr(const char *s, size_t count, int c)
功能:在给定字符串查找是否存在字符c,存在则返回第一次出现的位置,不存在返回NULL,限制查找次数count
char *strchrnul(const char *s, int c)
功能:在给定字符串查找是否存在字符c,存在则返回第一次出现的位置,不存在返回s结尾的位置。
char *strrchr(const char *s, int c)
功能:在给定字符串查找是否存在字符c,存在则返回最后一次出现的位置,不存在返回NULL
void *memchr(const void *s, int c, size_t n)
功能:在给定内存空间查找是否存在字符c,存在则返回首次出现的位置,不存在返回NULL
char *strstr(const char *s1, const char *s2)
功能:在s1中查找s2,找到返回在s1中的位置,否则返回NULL
函数实现:
char *strstr(const char *s1, const char *s2)
{
size_t l1, l2;
l2 = strlen(s2);
if (!l2)
return (char *)s1;
l1 = strlen(s1);
while (l1 >= l2) {
l1--;
if (!memcmp(s1, s2, l2))
return (char *)s1;
s1++;
}
return NULL;
}
char *strnstr(const char *s1, const char *s2, size_t len)
功能:在s1中查找s2指定找len个长度,找到返回在s1中的位置,否则返回NULL
size_t strspn(const char *s, const char *accept)
功能:该函数返回 s中第一个不在字符串accept中出现的字符下标(初始段匹配长度 )。
函数实现:
size_t strspn(const char *s, const char *accept)
{
const char *p;
for (p = s; *p != '\0'; ++p) {
if (!strchr(accept, *p))
break;
}
return p - s;
}
size_t strcspn(const char *s, const char *reject)
功能:该函数返回 s中第一个在字符串reject中出现的字符下标(初始段不匹配长度 )。
函数实现:
size_t strcspn(const char *s, const char *reject)
{
const char *p;
for (p = s; *p != '\0'; ++p) {
if (strchr(reject, *p))
break;
}
return p - s;
}
char *strpbrk(const char *cs, const char *ct)
功能:查找在字符串cs中首次出现ct中任一字符的位置
函数实现:
char *strpbrk(const char *cs, const char *ct)
{
const char *sc1, *sc2;
for (sc1 = cs; *sc1 != '\0'; ++sc1) {
for (sc2 = ct; *sc2 != '\0'; ++sc2) {
if (*sc1 == *sc2)
return (char *)sc1;
}
}
return NULL;
}
char *strsep(char **s, const char *ct)
函数功能:s为要分解的字符串,delim为分隔符字符串。
函数实现:
char *strsep(char **s, const char *ct)
{
char *sbegin = *s;
char *end;
if (sbegin == NULL)
return NULL;
end = strpbrk(sbegin, ct);
if (end)
*end++ = '\0';
*s = end;
return sbegin;
}
char *strtok( char *str, const char *delim)
char *strtok( char *restrict str, const char *restrict delim );(C99开始)
功能:返回被分解的第一个子字符串,如果没有可检索的字符串,则返回一个空指针
注意:此函数是破坏性的:它写入’\0’字符到字符串str的元素