衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(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

你有面試中,要求寫memcpy的源碼實(shí)現(xiàn)嗎?本文給出一個(gè)參考寫法!

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ǔ)法寫出其實(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)單寫了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)容及配圖由入駐作者撰寫或者入駐合作網(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

    文章

    7614

    瀏覽量

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

    關(guān)注

    8

    文章

    652

    瀏覽量

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

    關(guān)注

    3

    文章

    4346

    瀏覽量

    62979
收藏 人收藏

    評(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 ?2871次閱讀
    【<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 ?1841次閱讀

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

    回答面試題Int 與Integer的區(qū)別第三節(jié) 以數(shù)據(jù)結(jié)構(gòu)挖掘集合面試考點(diǎn)第四節(jié) 經(jīng)典面試題重載與重寫第五節(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 ?2342次閱讀
    【<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 ?2716次閱讀
    【<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 ?3606次閱讀
    【<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 ?2849次閱讀

    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>集(完整版)
    发中发百家乐官网的玩法技巧和规则| 百家乐官网下注几多| 百家乐任你博娱乐场| 哪个百家乐官网网站信誉好| 在线博弈游戏| 尊龙百家乐娱乐场开户注册| 希尔顿百家乐官网娱乐城 | 最好的百家乐官网论坛| 大发888xp缺少casino| 百家乐出千赌具| 温州市百家乐官网鞋业| 河池市| 新全讯网网址112| 百家乐怎赌才赢钱| 3U百家乐游戏| 百家乐官网任你博娱乐网| 肯博百家乐官网游戏| 大发888网站多少| 如何胜百家乐的玩法技巧和规则| 做生意摆放的招财物件| 百家乐官网分析网| 伯爵百家乐官网娱乐城| 多彩国际娱乐| 新全讯网3344555| 蓝盾百家乐具体玩法技巧| 网上百家乐合法吗| 好望角百家乐官网的玩法技巧和规则 | 大发888真钱| 百家乐九| 百家乐群1188999| 百家乐机器二手| 百家乐官网博娱乐网赌百家乐官网| 澳门百家乐官网公试打法| 旺苍县| 博彩现金开户| 大发888娱乐场东南网| 威尼斯人娱乐城代理| 百家乐赌场详解| 自己做生意怎样才能带来财运| 百家乐官网机器出千| 网络百家乐官网破解器|