strtok で最初の一語を取得2013年02月06日 14時09分43秒

何か変わったことをやっているコードだとは思っていたが、長いこと何をやっているのか分らなかった。少し簡単にした例を上げる。

% cat sentence.c
#include <string.h>
#include <stdio.h>

int main()
{
    char sentence[] = "This is a pen";
    strtok( sentence, " " );
    puts( sentence );
}
% CC sentence.c          
% ./a.out 
This

strtok は基本的に文字列を区切りたいときに使い、その戻り値を使うのが定石。そんなに使いやすい関数ではないが、C ライブラリにも長年あるので、ちょっと使いたいときに便利。

sentence を表示しているが、strtok の副作用で、最初の空白で切れるために、最初の単語のみを切り出すことになる。

分りづらかった理由の一つが、戻り値を使わないこと。なぜ、唐突に strtok と不思議に思っていた。

そして、その分りづらさに更に一捻り加えたのがその入力値。ほぼ全ての値が元々、一単語なのだ。今まで見てきた全ての場合が一単語。ちょっと変わった場合を試して、初めて二単語のケースに遭遇した。その結果を見てやっとその意図が汲めた。

関数を本来の目的とは異なった事に用いて、その副作用だけを活用する、とても悪い関数の使い方の例。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

名前:
メールアドレス:
URL:
コメント:

トラックバック

このエントリのトラックバックURL: http://uyota.asablo.jp/blog/2013/02/06/6713756/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。