Re: str{,l,n}cpy()
<kounoike@mbh.nifty.com> wrote in message
news:bu32qh$qmo$1@caraway.media.kyoto-u.ac.jp...
> "Yasushi Shinjo" <yas@is.tsukuba.ac.jp> wrote in message
> news:YAS.04Jan14033858@kirk.is.tsukuba.ac.jp...
> > 新城@筑波大学情報です。こんにちは。
> > たしかに、malloc() した直後で大きさが分かっていれば strcpy()
> > でもOKというのはわかります。でも、大きさわかつているなら、
> > memcpy() したい。
> >
> > void copy(char *dst, char *src, size_t n)
> > {
> > size_t l = strlen(src);
> > if( l > n-1 )
> > l = n-1 ;
> > memcpy(dst,src,l);
> > dst[l] = 0;
> > }
>だとしたら,strncpyが重いと言うのは
> ちょっと納得できません。つまり,ワード単位を考慮したstrncpyを作れば(ある
の
> かも知れませんが)memcpy採用よりは速くなるはずと思いますが。(strlen(src)
が
> 不要な分だけ。)
自己フォロー。すいません,これ撤回させて頂きます。早とちりでした。ワード単位
を考慮したstrncpyのスマートな実装ってそう簡単ではないような気がします。でき
たところでmemcpyより速くなるとは思えません。つまり,どうやって残り(これも
strlen(src)しなければ分からない。)をワード単位に,しかも'\0'で埋めるのかと
考えると。ちょっと私では思いつきません。
蛇足ですが,上の例では,文字列のコピーだけ考えるなら
memcpy(dst,src,n);
dst[n] = 0;
で用はなすように思います。dst[l] = 0は保証されているから。
--
******************************
keizi kounoike
******************************
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735