memset()函数原型是extern void *memset(void *buffer, int c, int count)
头文件:#include <string.h>
buffer:为指针或是数组,
c:是赋给buffer的值,
count:是buffer的长度
一般用来进行初始化,memset可以方便的清空一个结构类型的变量或数组
不建议用来干别的。。。。。。因为。。。。。。。哈哈你试下就知道
memset是一个字节一个字节的设置,所以你想设置为1的时候,你就会得到0x01010101
void *memset(void *s, int c, rt_ubase_t count)
{
char *xs = (char *)s;
while (count--)
*xs++ = c;
return s;
}
更加详细的memset使用可以跳到这个大兄弟的博客: https://blog.csdn.net/qq_27522735/article/details/53374765
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
头文件:#include <string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域不能重叠,函数返回指向dest的指针。
有一点要注意的事判断源地址和目的地址的大小,才决定到底是从高地址开始拷贝还是低地址开始拷贝
void *memcpy(void *dst, const void *src, int count)
{
char *tmp = (char *)dst, *s = (char *)src;
int len;
if (tmp <= s || tmp > (s + count))
{
while (count--)
*tmp ++ = *s ++;
}
else
{
for (len = count; len > 0; len --)
tmp[len - 1] = s[len - 1];
}
return dst;
}
更加详细的memset使用可以跳到这个大兄弟的博客:https://blog.csdn.net/qq_35040828/article/details/71123521
原型:extern void *memmove(void *dest, const void *src, unsigned int count);
用法:#include <string.h>
功能:由src所指内存区域复制count个字节到dest所指内存区域。
说明:src和dest所指内存区域可以重叠。
void *memmove(void *dest, const void *src, rt_ubase_t n)
{
char *tmp = (char *)dest, *s = (char *)src;
if (s < tmp && tmp < s + n)
{
tmp += n;
s += n;
while (n--)
*(--tmp) = *(--s);
}
else
{
while (n--)
*tmp++ = *s++;
}
return dest;
}
更加详细的memset使用可以跳到这个大兄弟的博客:https://blog.csdn.net/zgaoq/article/details/54586049
原型:extern int memcmp(void *buf1, void *buf2, unsigned int count);
用法:#include <string.h>
功能:比较内存区域buf1和buf2的前count个字节。
说明:当buf1<buf2时,返回值<0当buf1=buf2时,返回值=0当buf1>buf2时,返回值>0
int memcmp(const void *cs, const void *ct, int count)
{
const unsigned char *su1, *su2;
int res = 0;
for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
if ((res = *su1 - *su2) != 0)
break;
return res;
}
原型:extern int strnlen(const char *s, int maxlen)
用法:#include <string.h>
功能:获取s的长度,指定maxlen。
说明:返回长度。
int strnlen(const char *s, int maxlen)
{
const char *sc;
for (sc = s; *sc != '\0' && sc - s < maxlen; ++sc) /* nothing */
;
return sc - s;
}
同上
int strlen(const char *s)
{
const char *sc;
for (sc = s; *sc != '\0'; ++sc) /* nothing */
;
return sc - s;
}
原型:char *strstr(const char *s1, const char *s2)
用法:#include <string.h>
功能:功能就是找出在字符串str1中第一次出项字符串str2的位置(也就是说字符串sr1中要包含有字符串str2)
说明:找到就返回该字符串位置的指针(也就是返回字符串str2在字符串str1中的地址的位置),找不到就返回空指针(就是 null)
char *strstr(const char *s1, const char *s2)
{
int 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;
}
更加详细的memset使用可以跳到这个大兄弟的博客:https://blog.csdn.net/u013298384/article/details/24839727
原型:long atoi(const char *str)
用法:#include <string.h>
功能:把字符串转换成数字
说明:不是rtt的内核源码
long atoi(const char *str)
{
long res = 0;
while(*str >= '0' && *str <= '9')
{
res = res*10 + *str -'\0';
str++;
}
return res;
}
更加详细的memset使用可以跳到这个大兄弟的博客:https://blog.csdn.net/gettogetto/article/details/49708419
上面的代码可以到这里下载:https://download.csdn.net/download/weixin_38452632/10677930
rtt的内核源码可以到这里下载:https://www.rt-thread.org/