C言語で、私はめったに使わないの
ですが strrchr という関数があります。
書式は次の通りです。
#include <string.h>
char *strrchr(const char *s, int c);
文字列 s の最後の文字の位置から調べて
最初に文字 c が見つかった位置のポインター
を返します。見つからなかったら NULL を
返します。
char s[]="abcdAefghjikABCD" という文字列の
char c ='A' の位置を知りたい場合に
p =strrchr(s,c) とすると後ろの方のABCDの
'A' の位置が得られます。
久しぶりに使ってみました。
ところがぜんぜん正しい位置を返してくれません。
なぜだろうと考えこみました。
この関数のサンプルを見てはたと気がつきました。
最初のアーギュメント 's' は文字列の最初の
位置を与えます。
上の例では先頭の 'a' の位置です。
ところが私はわざわざ調べて文字列の最後の
位置を与えていました。
ABCD の 'D' の位置です。
これでは結果が求められないわけです。
関数の中で文字列の最後は調べられます。
わざわざ関数を呼ぶ側で調べる必要はない
わけです。
自分でこの関数を作ったとしてもこのような
仕様にするだろうになぜぱっと頭に
うかばなかったのだろうとなさけなかったです。
関数を作った人は知りません。
でも関数の影に作った人がいるということは
想像できるでしょ。相手がどのように考えるか
思い描いてごらん、と教えられたものでした。
会うこともない人との対話です。