C99に対応した標準Cライブラリの実装レポートを行っていきます。

プロフィール 

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

ホーム 全記事一覧 << 前の記事 次の記事 >>

 

2008/10/07 11:46|

 

あまりにものらくらやってきたので、どの関数がまだだったのか、把握し切れているかどうか不安なのですが、<string.h>ヘッダに関しては、strncpy、strncat、strncmp関数で終わりだったかと思います。過不足に気づかれた方はご指摘ください。

というわけで、今回はstrncpy関数です。strncpy関数の仕様は、何となく変なのですが、末尾のナル文字が格納されることが保障されません。また、s2文字列がより短い場合、残りの部分にナル文字が書き込まれます。それでは、実装を見てみましょう。

#include <stddef.h>

char *strncpy(char * __restrict__ s1,
              const char * __restrict__ s2, size_t n)
{
  register char *ss, *t;
  for (ss = s1, t = ss + n;
      ss != t && (*ss = *s2) != '\0';
      ss++, s2++)
    ;
  for (; ss != t; ss++)
    *ss = '\0';
  return s1;
}

ご覧の通り、見たままの内容ですが、他の関数同様、nをデクリメントするのではなく、終端を指すポインタtを宣言して、文字数を管理するようにしています。

2006/05/04 00:20|文字列操作TB:0CM:2

コメント

>過不足に気づかれた方はご指摘ください。
strtokはどこ?
マイケル #-|2006/07/09(日) 17:16 [ 編集 ]


> strtokはどこ?
ご指摘ありがとうございます。
おっしゃるとおり漏れていました。
適当にタイミングを見計らって、取り上げたいと思います。
たかぎ #ftr86F3A|2006/07/09(日) 23:29 [ 編集 ]

コメントの投稿

管理者にだけ表示を許可する


トラックバック
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/49-97a06b02

ホーム 全記事一覧 << 前の記事 次の記事 >>

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

このブログをリンクに追加する

Powered By FC2ブログ 

Powered By FC2ブログ
ブログやるならFC2ブログ

Copyright(C) 2006 TAKAGI Nobuhisa All rights reserved.
Powered by FC2ブログ. 無料ホームページ アフィリエイト レンタルサーバー FC2ブログ 一戸建て template designed by 遥かなるわらしべ長者への挑戦.