mempcpy
某BSDで新しめの Binutilsをビルドしようとしたら、mempcpyなる関数が
リンクできませんってことで、manで調べてみたら glibcの拡張の関数で、
機能的には memcpyと同じだけど、戻り値が違うというものです。戻り値は
最終的に書き込んだアドレスの次のバイト(正常に書けていれば、
第一引数 dest + 第三引数 nのアドレス)になります。
テスト
#include <stdio.h> #define _GNU_SOURCE #include <string.h> int main (void) { char dest[32]; void *retval; const char src[] = "helloworld"; retval = mempcpy(dest, src, sizeof(src)); printf("retval = %p\n" "dest = %p\n" "dest+size = 0x%12lx\n", retval, dest, (unsigned long)dest + sizeof(src)); return 0; }
結果
期待通りの結果です。
retval = 0x7fff9e2ef83b dest = 0x7fff9e2ef830 dest+size = 0x7fff9e2ef83b
最後に
いまいち使いどころがわからない・・・。