1、memcpy函式
void *memcpy(void *dst, constvoid *src, int len)
void *ret =dst;
if(dst <= src || (char *)dst >= (char *)src +len)
}else }
return
ret;
}
2、memmove函式
在linux中,memcpy是不考慮記憶體重疊的隱患問題的,即方法一; memcpy的改進版,考慮上記憶體重疊問題,就是memmove,即方法二。
方法一:
void *memcpy(void *dest, const
void *src, size_t n)
方法二:
void *memmove(void *dest, const
void *src, size_t n)
else
//有記憶體重疊,從高位址開始複製
return
dest;
}3、strcpy函式
char *strcpy(char *strdest, constchar *strsrc)
4、strcat函式
char * strcat (char * dst, constchar *src)
//那麼為什麼要返回char*型別呢?
答:是為了方便賦值給其他變數
//再問,還有其他辦法能實現s1連線s2字串嗎?
答:可以,如下:
void mystrcat (char dst[ ],charsrc)
dst[i]=』\0』; //
在字串dst的末尾新增乙個字串結束標誌
}
5、atoi函式
int myatoi(char *str)if (*str == '
-' || *str == '+'
) str++;
}while (*str >= '
0' && *str <= '9'
)
else
ret = ret * 10 +cur;
str++;
}return ret *flag;
}————————————————
#define int_max 2147483647
#define int_min (-int_max - 1)二者位於
之中
前端手寫系列 手寫reduce函式
reduce函式常用於對陣列,reduce函式接受3個引數 被迭代的陣列 用於迭代計算的函式 迭代的初始值 注意點 如果沒有提供初始值時,會預設使用陣列的第乙個元素來作為初始值 function reduce arr,callback,initialval 如果沒有將initialval傳遞給該函式...
手寫call,apply,bind函式
涉及面試題 考慮兩點 function.prototype.mycall function context context context window 和上面的 一樣 context.fn this const args arguments slice 1 const result context...
手寫call apply bind函式
function.prototype.mcall function context,args context context window global const funcname symbol context funcname this 傳入的引數不是陣列 if array.isarray ar...