FC2ブログ

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

プロフィール 

高木信尚

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

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

 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--/--/-- --:--|スポンサー広告

 

あまりにものらくらやってきたので、どの関数がまだだったのか、把握し切れているかどうか不安なのですが、<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フィード 

リンク 

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

Copyright(C) 2006 TAKAGI Nobuhisa All rights reserved.
Powered by FC2ブログ. template designed by 遥かなるわらしべ長者への挑戦.
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。