2016-10-16 9 views
-5

昨日、3つの引数、1つのソース、1つのデスティネーション、およびその他の長さを受け付ける関数を書くように頼んだインタビューがありました。長さパラメータとソースとデスティネーションのタイプに基づいてソースからデスティネーションへの値が異なる可能性があります。1型の1変数を別のC型の別の変数にコピー

誰かが一般的な関数を書くのを手伝ってもらえますか?

ありがとうございますが、memcpy(またはmemmove)を意味し、事前

+0

質問がありましたか? –

+0

memcpyのようなサウンド:http://man7.org/linux/man-pages/man3/memcpy.3.html –

答えて

2

でたくさん? :P

ナイーブ実装(使用バイト):

int my_memcpy(void *dest, const void *src, size_t len) 
{ 
    if (dest == NULL || src == NULL || src == dest) return -1; 
    if (len == 0) return 0; 

    char *dest_bytes = dest; 
    const char *src_bytes = src; 
    for(size_t i = 0; i < len; i++) { 
     dest_bytes[i] = src_bytes[i]; 
    } 
    return 0; 
} 

つ(char *と残りの世話をする)、ループはループのためのより多くのデータを各反復をコピーするアンロールuint64_tポインタを使用して最適化することができ。

関連する問題