Bscis Knowledge(Function)

来源:互联网 发布:淘宝高开叉紧身长裙 编辑:程序博客网 时间:2024/04/29 08:06

extern unsigned int strlen(char *s)

计算字符串s的(unsigned int)长度,不包括(‘\0’)

int strlen(const char *str){    assert(str!=nullptr);    int len=0;    while((*str++) != '\0') len++;    return len;}

void *memest(void *s, int ch, size_t count)

将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s .作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法

void *memest(void *src, int ch, size_t count){    assert(str!=nullptr);    char *tmpsrc = (char*)src;    while(count--) *tmpsrc++ = (char)ch;    return src;}

void *memcpy(void *dst, const void *src, size_t n)

从源src所指的内存地址其实位置开始拷贝n个字节到目标dest所指的内存地址的起始位置中

void *memcpy(void *dst, const void *src, size_t num){    assert((dst!=nullptr) && (scr!=nullptr));    assert(des >= scr+num || scr > dst+num);//内存重叠    byte *psrc = (byte*)src;//byte即为unsigned char类型    byte *pdst = (byte*)dst;    while(num-- > 0) *pdst++ = *psrc++;//先取值,再指向下一位    return dst;}

void memmove(void dest, const void* src, size_t count)

memmove用于从src拷贝count个字符到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同

void* memmove(void* dest, void* source, size_t count) {       void* ret = dest;       if (dest <= source || dest >= (source + count))       {            //Non-Overlapping Buffers            //copy from lower addresses to higher addresses            while (count --) *dest++ = *source++;       }       else {            //Overlapping Buffers            //copy from higher addresses to lower addresses        dest += count - 1;source += count - 1;        while (count--)  *dest-- = *source--;      }      return ret;   }
0 0
原创粉丝点击