【C語(yǔ)言經(jīng)典面試題】源碼實(shí)現(xiàn)標(biāo)準(zhǔn)庫(kù)函數(shù)memcpy
你有面試中,要求寫(xiě)memcpy的源碼實(shí)現(xiàn)嗎?本文給出一個(gè)參考寫(xiě)法!
1 需求說(shuō)明2 源碼實(shí)現(xiàn)2.1 函數(shù)申明2.2 功能實(shí)現(xiàn)3 源碼測(cè)試4 小小總結(jié)
1 需求說(shuō)明
題目大意如下:
請(qǐng)參考標(biāo)準(zhǔn)C庫(kù)對(duì)memcpy的申明定義,使用C語(yǔ)言的語(yǔ)法寫(xiě)出其實(shí)現(xiàn)源碼。
2 源碼實(shí)現(xiàn)
2.1 函數(shù)申明
通過(guò)查看man幫助,我們可以知道m(xù)emcpy函數(shù)的功能及其簡(jiǎn)要申明。
NAME
memcpy - copy memory area
?
SYNOPSIS
#include
?
void *memcpy(void *dest, const void *src, size_t n);
?
DESCRIPTION
The memcpy() function copies n bytes from memory area src to memory area dest. The memory areas must not overlap. Use memmove(3) if the memory
areas do overlap.
?
RETURN VALUE
The memcpy() function returns a pointer to dest.
2.2 功能實(shí)現(xiàn)
以下是我的一個(gè)簡(jiǎn)單實(shí)現(xiàn)源碼,僅供參考:
char *my_memcopy(char* dest, const char *src, size_t len)
{
assert(dest && src && (len > 0));
if (dest == src) {
;
} else {
char *p = dest;
size_t i;
for (i = 0; i < len; i++) {
*p++ = *src++;
}
}
?
return dest;
}
3 源碼測(cè)試
簡(jiǎn)單的測(cè)試代碼如下:
#include
#include
?
int main(void)
{
char buf[30] = "123456789abcdef";
printf("before-memcpy-buf: %s
", buf);
my_memcopy(buf + 5, buf, 3);
printf("after-memcpy-buf: %s
", buf);
?
printf("before-memcpy-buf: %s
", buf);
my_memcopy(buf + 5, buf, 9);
printf("after-memcpy-buf: %s
", buf);
?
return 0;
}
?
簡(jiǎn)單寫(xiě)了build.sh腳本做編譯測(cè)試:
#! /bin/bash -e
?
CFLAGS="-Wall -Werror"
cmd="gcc *.c $CFLAGS -o test"
?
if [ "$1" = "clean" ]; then
rm -rf test
echo "Clean build done !"
exit 0
fi
?
echo $cmd && $cmd
執(zhí)行編譯后,運(yùn)行小程序的結(jié)果:
c_c++/memmove$ ./test
before-memcpy-buf: 123451239abcdef
after-memcpy-buf: 123451239abcdef
?
before-memcpy-buf: 12345123451239f
after-memcpy-buf: 12345123451234f
?
從運(yùn)行結(jié)果上看,基本滿足了題目要求,有心的讀者可以進(jìn)一步測(cè)試其他測(cè)試用例。
4 小小總結(jié)
memcpy的源碼實(shí)現(xiàn),核心就是內(nèi)存拷貝分,盡管它和memmove的接口原型是一樣的,但是它們實(shí)現(xiàn)的功能還是有本質(zhì)區(qū)別的,你都get到了嗎?
審核編輯:湯梓紅
-
C語(yǔ)言
+關(guān)注
關(guān)注
180文章
7594瀏覽量
135858 -
源碼
+關(guān)注
關(guān)注
8文章
632瀏覽量
29110 -
函數(shù)
+關(guān)注
關(guān)注
3文章
4277瀏覽量
62323
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論