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

プロフィール 

Author:高木信尚

ホームページ
ブログ

最近の記事 

最近のコメント 

最近のトラックバック 

月別アーカイブ 

カテゴリー 

ブロとも申請フォーム 

この人とブロともになる

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

 

2008/10/07 11:42|

 

文字列の連結を行うstrcat関数は、strlen関数とstrcpy関数を合わせたような機能を持っています。つまり意味的には、

char *strcat(char * restrict s1, const char * restrict s2)
{
  strcpy(s1 + strlen(s1), s2);
  return s1;   // 間違っていたので少し直しました
}

ということになるわけです。実装もこれと大差はありませんが、strlenやstrcpyといった関数を呼び出すのではなく、直接展開しているだけです。したがって、

#include <stddef.h>

char *strcat(char * __restrict__ s1, const char * __restrict__ s2)
{
  register char *ss;
  for (ss = s1; *ss != '\0'; ss++)
    ;
  for (; (*ss = *s2) != '\0'; ss++, s2++)
    ;
 return s1;
}

とすれば完成です。

ところで、strcat という関数名ですが、STRing ConcAtenaTe の意味だとか。かなり無理があるような気がするのは私だけでしょうか。
2006/02/27 22:17|文字列操作TB:0CM:0

コメント
コメントの投稿

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


トラックバック
トラックバックURLはこちら
http://libc.blog47.fc2.com/tb.php/32-1e5aa33b

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

ブログ内検索 

お勧め書籍 

RSSフィード 

リンク 

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

Powered By FC2ブログ 

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

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