0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【C語(yǔ)言經(jīng)典面試題】源碼實(shí)現(xiàn)標(biāo)準(zhǔn)庫(kù)函數(shù)memcpy

嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 來(lái)源:嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 作者:嵌入式物聯(lián)網(wǎng)開(kāi)發(fā) ? 2022-09-30 17:12 ? 次閱讀

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到了嗎?

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7594

    瀏覽量

    135858
  • 源碼
    +關(guān)注

    關(guān)注

    8

    文章

    632

    瀏覽量

    29110
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4277

    瀏覽量

    62323
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言進(jìn)階】面試題:請(qǐng)使用宏定義實(shí)現(xiàn)字節(jié)對(duì)齊

    C語(yǔ)言進(jìn)階】面試題:請(qǐng)使用宏定義實(shí)現(xiàn)字節(jié)對(duì)齊
    的頭像 發(fā)表于 07-11 09:21 ?2701次閱讀
    【<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b>進(jìn)階】<b class='flag-5'>面試題</b>:請(qǐng)使用宏定義<b class='flag-5'>實(shí)現(xiàn)</b>字節(jié)對(duì)齊

    經(jīng)典面試題】請(qǐng)使用C語(yǔ)言編程實(shí)現(xiàn)對(duì)IPV4地址的合法性判斷

    經(jīng)典面試題】請(qǐng)使用C語(yǔ)言編程實(shí)現(xiàn)對(duì)IPV4地址的合法性判斷
    的頭像 發(fā)表于 05-16 15:23 ?1676次閱讀

    java經(jīng)典面試題深度解析

    回答面試題Int 與Integer的區(qū)別第三節(jié) 以數(shù)據(jù)結(jié)構(gòu)挖掘集合面試考點(diǎn)第四節(jié) 經(jīng)典面試題重載與重寫(xiě)第五節(jié) 如何回答面試官提問(wèn)Java的接
    發(fā)表于 06-20 15:16

    C語(yǔ)言 經(jīng)典面試題

    C語(yǔ)言經(jīng)典面試題目.doc
    發(fā)表于 08-05 22:03

    c語(yǔ)言面試題,c++面試題下載

    c語(yǔ)言面試題,c++面試題1. static有什么用途?(請(qǐng)至少說(shuō)明兩種) 1) 限制變量的作用域 2) 設(shè)置變量的存儲(chǔ)域 2.&
    發(fā)表于 10-22 11:19 ?5次下載

    c語(yǔ)言面試題

    c語(yǔ)言面試題集(單片機(jī))C language problem(20151125084232)
    發(fā)表于 12-18 14:05 ?9次下載

    c語(yǔ)言面試題

    c語(yǔ)言面試題
    發(fā)表于 11-05 16:48 ?0次下載

    C語(yǔ)言經(jīng)典面試題

    面試題
    發(fā)表于 12-20 22:41 ?0次下載

    C語(yǔ)言經(jīng)典面試題

    C語(yǔ)言 經(jīng)典面試題
    發(fā)表于 01-05 11:27 ?0次下載

    經(jīng)典硬件面試題精選及解答

    經(jīng)典硬件面試題精選及解答
    發(fā)表于 11-29 18:02 ?0次下載

    C語(yǔ)言經(jīng)典面試題函數(shù)指針數(shù)組的定義是怎么樣的?

    經(jīng)典面試題,有必要了解下!
    的頭像 發(fā)表于 10-05 16:35 ?2228次閱讀
    【<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>經(jīng)典</b><b class='flag-5'>面試題</b>】<b class='flag-5'>函數(shù)</b>指針數(shù)組的定義是怎么樣的?

    C語(yǔ)言經(jīng)典面試題】static關(guān)鍵字的作用有哪些?

    經(jīng)典面試題,有必要了解下!
    的頭像 發(fā)表于 10-02 12:00 ?2629次閱讀
    【<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>經(jīng)典</b><b class='flag-5'>面試題</b>】static關(guān)鍵字的作用有哪些?

    C語(yǔ)言經(jīng)典面試題】求數(shù)組元素的個(gè)數(shù)的宏定義

    經(jīng)典面試題,有必要了解下!
    的頭像 發(fā)表于 10-02 11:58 ?3464次閱讀
    【<b class='flag-5'>C</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>經(jīng)典</b><b class='flag-5'>面試題</b>】求數(shù)組元素的個(gè)數(shù)的宏定義

    分享10道有趣的嵌入式C語(yǔ)言面試題及答案

    10個(gè)C語(yǔ)言面試題,涉及指針、進(jìn)程、運(yùn)算、結(jié)構(gòu)體、函數(shù)、內(nèi)存,看看你能做出幾個(gè)!
    的頭像 發(fā)表于 05-09 10:54 ?2642次閱讀

    c語(yǔ)言面試題集(完整版)

    電子發(fā)燒友網(wǎng)站提供《c語(yǔ)言面試題集(完整版).pdf》資料免費(fèi)下載
    發(fā)表于 10-20 11:20 ?2次下載
    <b class='flag-5'>c</b><b class='flag-5'>語(yǔ)言</b><b class='flag-5'>面試題</b>集(完整版)