精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【C語言經典面試題】源碼實現標準庫函數memcpy

嵌入式物聯網開發 ? 來源:嵌入式物聯網開發 ? 作者:嵌入式物聯網開發 ? 2022-09-30 17:12 ? 次閱讀

C語言經典面試題】源碼實現標準庫函數memcpy

你有面試中,要求寫memcpy的源碼實現嗎?本文給出一個參考寫法!

1 需求說明2 源碼實現2.1 函數申明2.2 功能實現3 源碼測試4 小小總結

1 需求說明

題目大意如下:

請參考標準C庫對memcpy的申明定義,使用C語言的語法寫出其實現源碼。

2 源碼實現

2.1 函數申明

通過查看man幫助,我們可以知道memcpy函數的功能及其簡要申明。

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 功能實現

以下是我的一個簡單實現源碼,僅供參考:

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 源碼測試

簡單的測試代碼如下:

#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;
}
?

簡單寫了build.sh腳本做編譯測試:

#! /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

執行編譯后,運行小程序的結果:

c_c++/memmove$ ./test 
before-memcpy-buf: 123451239abcdef
after-memcpy-buf: 123451239abcdef
?
before-memcpy-buf: 12345123451239f
after-memcpy-buf: 12345123451234f
?

從運行結果上看,基本滿足了題目要求,有心的讀者可以進一步測試其他測試用例。

4 小小總結

memcpy的源碼實現,核心就是內存拷貝分,盡管它和memmove的接口原型是一樣的,但是它們實現的功能還是有本質區別的,你都get到了嗎?

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • C語言
    +關注

    關注

    180

    文章

    7598

    瀏覽量

    136188
  • 源碼
    +關注

    關注

    8

    文章

    633

    瀏覽量

    29139
  • 函數
    +關注

    關注

    3

    文章

    4306

    瀏覽量

    62430
收藏 人收藏

    評論

    相關推薦

    C語言進階】面試題:請使用宏定義實現字節對齊

    C語言進階】面試題:請使用宏定義實現字節對齊
    的頭像 發表于 07-11 09:21 ?2751次閱讀
    【<b class='flag-5'>C</b><b class='flag-5'>語言</b>進階】<b class='flag-5'>面試題</b>:請使用宏定義<b class='flag-5'>實現</b>字節對齊

    經典面試題】請使用C語言編程實現對IPV4地址的合法性判斷

    經典面試題】請使用C語言編程實現對IPV4地址的合法性判斷
    的頭像 發表于 05-16 15:23 ?1718次閱讀

    java經典面試題深度解析

    回答面試題Int 與Integer的區別第三節 以數據結構挖掘集合面試考點第四節 經典面試題重載與重寫第五節 如何回答面試官提問Java的接
    發表于 06-20 15:16

    C語言 經典面試題

    C語言經典面試題目.doc
    發表于 08-05 22:03

    c語言面試題,c++面試題下載

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

    c語言面試題

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

    c語言面試題

    c語言面試題
    發表于 11-05 16:48 ?0次下載

    C語言經典面試題

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

    C語言經典面試題

    C語言 經典面試題
    發表于 01-05 11:27 ?0次下載

    經典硬件面試題精選及解答

    經典硬件面試題精選及解答
    發表于 11-29 18:02 ?0次下載

    C語言經典面試題函數指針數組的定義是怎么樣的?

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

    C語言經典面試題】static關鍵字的作用有哪些?

    經典面試題,有必要了解下!
    的頭像 發表于 10-02 12:00 ?2643次閱讀
    【<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>經典</b><b class='flag-5'>面試題</b>】static關鍵字的作用有哪些?

    C語言經典面試題】求數組元素的個數的宏定義

    經典面試題,有必要了解下!
    的頭像 發表于 10-02 11:58 ?3481次閱讀
    【<b class='flag-5'>C</b><b class='flag-5'>語言</b><b class='flag-5'>經典</b><b class='flag-5'>面試題</b>】求數組元素的個數的宏定義

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

    10個C語言面試題,涉及指針、進程、運算、結構體、函數、內存,看看你能做出幾個!
    的頭像 發表于 05-09 10:54 ?2699次閱讀

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

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