常見的str及mem系列函式的實現
/*由src所指記憶體區域複製count個位元組到dst所指記憶體區域,如果目標區域和源區域有重疊的話
memmove能夠保證源串在被覆蓋之前將重疊區域的位元組拷貝到目標區域中,但複製後源內容會被更改。
但是當目標區域與源區域沒有重疊則和memcpy函式功能相同*/
void* my_memmove(void* dst, const void* src, size_t count)
char* psrc = (char*)src;
char* pdst = (char*)dst;
/*從前往後*/
if((pdst <= psrc) || (pdst >= psrc+count)) }
else }
return dst;
}/*由src所指記憶體區域複製count個位元組到dst所指記憶體區域中
說明:src和dst所指記憶體區域不能重疊*/
void* my_memcpy(void* dst, const void* src, size_t count)
char *psrc = (char*)src;
char *pdst = (char*)dst;
/*從前往後*/
if((pdst <= psrc) || (pdst >= psrc+count)) }
else /*從後往前*/ }
return dst;
}/*將buffer所指向記憶體的前n個位元組的內容全部替換為val制定的ascii值,並返回bufffer*/
void* my_memset(void* buffer, int val, size_t n)
char* tmp = (char*)buffer;
while(n--)
return buffer;
}/*將從src位址開始且含有\0結束符的字串複製到以dst開始的位址空間
說明:src和dst所指記憶體區域不可重疊,且dst必須有足夠空間容納src的字串*/
char* my_strcpy(char* dst, const char* src)
char* tmp = dst;
while((*tmp ++ = *src++) != '\0');
return dst;
}/*將src位址開始的前n個位元組複製到dst所指空間
說明:當 src 的長度小於 n 時,dest 的剩餘部分將用空位元組填充。*/
char* my_strncpy(char* dst, const char* src, size_t n)
char*tmp = dst;
while((n) && ((*tmp++ = *src++) != '\0'))
while(n--)
return dst;
}/*比較兩個字串的大小,
若str1 == str2,返回0,
若str1 > str2,返回正數
若str1 < str2,返回負數*/
int my_strcmp(const char* str1, const char* str2)
while((*str1 != '\0') && (*str2 != '\0') && (*str1 == *str2))
return *str1 - *str2;
}/*把 src 所指向的字串追加到 dst 所指向的字串的結尾*/
char* my_strcat(char *dst, const char* src)
char* tmp = dst + strlen(dst);
while((*tmp++ = *src++) != '\0');
return dst;
}/*把src所指字串的前n個字元新增到dst所指字串的結尾處,
並覆蓋dest所指字串結尾的'\0',從而實現字串的連線*/
char* my_strncat(char* dst, const char* src, size_t n)
char *tmp = dst + strlen(dst);
while((n--) && (*tmp++ = *src++) != '\0');
*tmp = '\0';
return dst;
}/*計算字串 str 的長度,直到'\0',但不包括'\0'*/
size_t my_strlen(const char* str)
size_t len = 0;
while(*str++ != '\0')
return len;
}
exec系列函式的實現
exec系列函式從linux的linux binfmt鍊錶中,通過依次呼叫每個結構的load binary函式來選擇合適的執行格式,一旦找到就執行load binary函式,否則嘗試下乙個linux binfmt的load binary 直到嘗試完所有的linux binfmt。load binar...
模擬實現str系列和mem系列庫函式
1.實現strcpy 拷貝字串 char my strcpy char dest,const char src return ret 注意 strcpy會將 0也拷貝,但是需要注意目標位址有足夠的空間進行拷貝。2.實現strcat 字串追加。strcat也會把src的 0拷貝到末尾,需要保證空間足夠...
Mem系列函式介紹及案例實現
昨天導師甩給我們乙個專案案例,讓我們自己去看一看熟悉一下專案內容,我看到了這個專案裡面大量使用memset sbuf,0,sizeof sbuf 這一塊記憶體填充的 於是回想起以前查過mem系列函式的具體用法。整理整理。函式名稱 memset 函式原型 void memset void s,int ...