標準 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/字長優化,教學版逐位元組即可。