1. 字符串操作函数 #include <string.h>
2. 计算字符串长度 int strlen(const char *s)
int strlen(const char *s)
{
const char *sc;
for (sc = s; *sc != '\0'; ++sc)
{
// TODO, do nothing
}
return (sc - s);
}
2. compare 字符串对比 int strcmp(const char *cs, const char *ct)
int strcmp(const char *cs, const char *ct)
{
signed char __res;
while (1) {
if (((__res = *cs - *ct++) != 0) || (!*cs++)) {
break;
}
}
return __res;
}
3. n compare 字符串对比n 个字符 int strcmp(const char *cs, const char *ct)
int strncmp(const char *cs, const char *ct, int count)
{
signed char __res = 0;
while (count) {
if ((__res = *cs - *ct++) != 0 || !*cs++) {
break;
}
count--;
}
return __res;
}
4. 内存清除,一般用于数组的清零操作
void *memset(void *s, int c, int count)
{
char *xs = s;
while (count--) {
*xs++ = c;
}
return s;
}
5. 内存拷贝,一般用于内存块的传递,任务之间传递消息块,类似送快递
void *memcpy(void *dest, const void *src, int count)
{
char *tmp = dest;
const char *s = src;
while (count--) {
*tmp++ = *s++;
}
return dest;
}
6. 内存比较
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; // res = abs(cs - ct)
}
7. 内存移动
void *memmove(void *dst, const void *src, int count)
{
char *_dst = dst;
const char *_src = src;
if (dst == src) {
return dst;
}
if (dst < src) {
return memcpy(dst, src, count);
}
_dst += count;
_src += count;
while(count--) {
*--_dst = *--_src;
}
return dst;
}