str mem系列函式的實現

2021-10-10 08:19:46 字數 2313 閱讀 3359

常見的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 ...