[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000465] Re: proto2c



豊田です。

> >たぶん CHARACTER*(*) と宣言したときは理解しやすくて、サブルーチンにとって
> >も呼び出し元で与えた長さの文字列ということになります。
>
> つまり、十分に長い領域を確保して、そこに nul を詰め込んで、
> サブルーチンに渡し、帰って来たもののうち nul でない部分を使
> うと言う方法しかないのかしら。

たぶん違います。CHARACTER*(*) な仮引数にどんなに長い実引数を対応付けても、
全体に代入すればサブルーチンは最後まで空白を入れてしまいます。
だから、NUL は得られません。

部分文字列に代入している場合は意味があるかもしれないけど、
それは FORTRAN 的に不便だからやらないでしょう。

> ところで、(DCLには無いと思うけど)空白で終わるよ
> うな文字列を返してくるようなばあいは、詰め物の空白と値の空白
> の境界が判定出来ないのですね。

そうです。

ちなみに、Fortran 90 では文字列の末尾の空白を除去したものを返す
関数 TRIM や、文字列の末尾の空白を無視した長さを返す関数 LEN_TRIM が用意
されました。DCL では LEN_TRIM の機能だけを LENC などで提供していたわけで
すが、それはおいておいて、文字列は値として末尾の空白を許さないと考えれば、
とても気持悪いですが一貫した操作体系になっています。
--
arte, non vi.
豊田英司: TOYODA Eizi
mailto:toyoda@xxxxxx