🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: fj.lang.c
Article #625

Re: [Q]区切りなしデータを文字型

#625
From: uehara
Date: Mon, 23 Mar 1998 00:00
50 lines
2428 bytes
NTTソフトウェアの上原です。

In article <3515DE25.166F@rim.crl.fujixerox.co.jp> Masao Seki <seki@rim.crl.fujixerox.co.jp> writes:
 |関です。
~
 |それで、どうやるかですが、scanf系で書式中の機能を使って、実行時に
 |フィールド幅を指定する事は出来ないと思います。

scanf系で「書式中の機能を使」うことにこだわらなければ
実行時にフィールド幅を指定するには

  char format[FIGURE*MAX+2+10];
  sprintf("%%%dd", FIGURE);
  scanf(&buf[FIGURE * i], format, FIGURE, &data[i]);

で良いかな(未確認)?

 |しかし、他の機能はprintfとscanf系で対称性を保っているのに、どうして
 |「*」だけ、全く異なる機能が割り付けられているのでしょうね。(私の

scanf系とprintf系では他にも非対称な部分はあります。

 %c    に対応する型が char(scanf)  か int(printf) か
 %h    に対応する型が short(scanf) か int(printf) か
 %[~] はscanfにしか無い、

とかですね。

 |実装上、難しいところがあるのでしょうか。Cでは、真の配列サイズが
 |コンパイる時に確定していなければならない事や、真の配列を関数間で受け
 |渡す事ができない事と、どこかで繋がっているのかも知れませんね。

主な理由は、入力と出力でやることがかなり違うからでは無いでしょうか?

 ~ ~ ~

ちなみにscanf系で「*」ってのは結構有用です。こないだは

  char c;
  int n;
 if (sscanf(base, "%*[a-zA-Z0-9]://%*[^/]%n%c", &n, &c) == 0 && n != 0) {
   ......

ていうコードを書きましたが、これは
「スラッシュで終らない単純なホスト名のURL」(例 http://xxx.yyy.zzz)
にマッチしてくれます。

--
§ NTTS○FT ニュービジネス事業本部第2プロジェクト 上原 潤二 §
Technical Details
Message-ID: <UEHARA.98Mar23231554@gate.po.ntts.co.jp>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <35128671.389@rim.crl.fujixerox.co.jp> <1998Mar20.165703.12790@merope.opus.or.jp> <3515DE25.166F@rim.crl.fujixerox.co.jp>

Show Full Headers
Complete Article Headers
X-Google-Language: Japanese,JIS
X-Google-Thread: 106434,8756f6f59b5f78c5
X-Google-Attributes: gid106434,public
From: uehara@po.ntts.co.jp
Subject: Re: [Q]区切りなしデータを文字型
Date: 1998/03/23
Message-ID: <UEHARA.98Mar23231554@gate.po.ntts.co.jp>
X-Deja-AN: 336834731
References: <35128671.389@rim.crl.fujixerox.co.jp> <1998Mar20.165703.12790@merope.opus.or.jp> <3515DE25.166F@rim.crl.fujixerox.co.jp>
Mime-Version: 1.0 (generated by tm-edit 7.105)
Content-Type: text/plain; charset=ISO-2022-JP
Organization: NTT Software Corp. Yokohama, Japan.
Newsgroups: fj.lang.c