首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言手寫標準庫:memcpy 逐位元組複製實作與測試

     編輯:關於C

標準 memcpy 語義

  • 複製 n 位元組從 src 到 dest。
  • **行為未定義** 若記憶體區域重疊。
  • 回傳 dest。

正確手寫實作

#include 
#include 

void *my_memcpy(void *dest, const void *src, size_t n) {
    assert(dest && src);
    unsigned char *d = (unsigned char *)dest;
    const unsigned char *s = (const unsigned char *)src;
    unsigned char *ret = d;
    while (n--) *d++ = *s++;
    return ret;
}

測試主程式

int main() {
    float src[] = {1.0, 2.0, 3.0, 4.0, 5.0};
    float dst[10];
    my_memcpy(dst, src, sizeof(src)); // 20 bytes
    for (int i = 0; i < 5; i++) printf("%.1f ", dst[i]);
    // 1.0 2.0 3.0 4.0 5.0
    return 0;
}

常見錯誤 (原碼)

  • 使用 int* 逐 4 字節複製 → 僅適用 4 的倍數長度,非通用。
  • 未處理 const 正確性。
  • 標準庫實際會用 SIMD/字長優化,教學版逐位元組即可。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved