Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

scanf のかわりは?

1,886 views
Skip to first unread message

Shiro SADO

unread,
Jun 23, 2000, 3:00:00 AM6/23/00
to

佐渡です。

スレッド「scanfのかわりは?」での
tyo...@anet.ne.jp氏の発言 <8j0gk7$ihu$1...@pin2.tky.plala.or.jp> より引用
>> C言語の本やホームページを見ているとよく「scanfは使わない方がよい」と
>> 書いてあります。だとしたら、プログラムでキーボードから入力したいとき
>> どの関数を呼べばよいのでしょうか?
>> どの関数を呼べばよいのかを教えてください。
>> お願いします。

理由も示さずに「scanfは使わない方がよい」と言うのは単なる
デマの流布です。そういう本やホームページは、あまり見ない
方が良いでしょう。そういう本を持っていたら、古本屋に売った
方が良いでしょう。
# でも、そう書いてある本って、自分は見たことないです。
# 是非、本の名前と出版社、ホームページのURLを紹介して下さい。


scanfは仕様上、

・変換が行なわれなかった時は、入力が消費されない。

・書式"%s"で変換を行なう場合、バッファオーバーランを
 引き起こす可能性がある。

となっています。

バッファオーバーラン(buffer overrun)は、文字列を読み込む
場合に、書き込んで良い領域(buf[0]~buf[255])を越えて書き
込みを行なおうとし、結果としてプログラムに予測不能な振舞
い(暴走)をさせるもので、最悪のバグのうちの一つです。

下手な使い方でscanfを使用したプログラムは、簡単に暴走・無
限ループに陥る可能性があります。
# だから、下手な使い方しか出来ない人(=初心者)が、
# 「scanfは使わない方が良い」と主張する場合はあります。

scanfを用いて例えば整数値を読む場合、

while( scanf( "%d", &x )!=1 )
;

などと書くと、"aa"(改行) と入力しただけで無限ループです。
これは"%d"で待ってて入力"aa"が来た時に"aa"が消費されない
ためで、こういう場合は"aa"が消費されるように、

int x, err;

fprintf( stderr, "input a integer:" ); /* 整数を入力して下さい */

while( (err=scanf( "%d", &x ))!=1 ) { /* 読み込みに成功したら終了 */
if( err==EOF ) { /* EOFに到達していたら、プログラムを終了させる */
fprintf( stderr, "読み込みに失敗(eofに到達).\n" );
exit(1);
}
scanf( "%*s" ); /* そうでなければ、トークンを一つ読み飛ばす */
}

などと書けば、無限ループを避けることが出来ます。

初心者の方などが無限ループを避けようとして、

int x;
char buf[256];

x = atoi(gets(buf));

と書いたり、文字列を読み込もうとして

char buf[256];

x = atoi(gets(buf));

などと書く場合がありますが、このように書かれたプログラム
は、無限ループにはなりませんが、容易にバッファオーバーラン
が引き起されてしまいます。

文字列を読み込みたい場合、"%s"を使わず、"%10s"など文字
数を指定し、

char buf[256];

if( scanf( "%255s", buf )==EOF ) {
fprintf( stderr, "読み込みに失敗(eof)。\n" );
exit(1);
}

または、

char buf[BUFFSIZE];
char fmt[256];

sprintf( fmt, "%%%ds", sizeof(buf)-1 );
if( scanf( fmt, buf )==EOF ) {
fprintf( stderr, "読み込みに失敗(eof)。\n" );
exit(1);
}

などとすれば、バッファオーバーランを避けることが出来ます。
# ところで、ここでgetchar()して空白文字以外が得られたら、
# ungetch()してもう一度scanfすると、文字列の続きが読めます。

一行まるまる読み込みたい場合などは、fgets()を用いても良い
ですが、scanfと組み合わせて使う場合、一行に書かれている
トークンすべてを読み終っても行末の改行記号を消費しません
(だって変換してないから)から、

scanf("%*[ \t]");
scanf("%*[\n]");

などで捨ててから、fgets()するなどします。
または <8elpm1$uau$1...@nozomi.amico.co.jp> を参照すると、
char buf[256];
scanf(" %255[^\n]", buf );
でも良いのでしょうか?

比較的最近(五月上旬)、fj.comp.lang.cでもscanfの話題があり、
詳しく論じられてます。この記事もそれを参考にしています。
WWWで見る場合、

url:

http://queen.heart.ne.jp/cgi-bin/queen?msgid=%3C38FFD884%2E8D05DF19%40cv%2Esony%2Eco%2Ejp%3E

あたりから始めて、Followup(Followuped by:で示されて
いるリンク)を辿ってみて下さい。

若干自信がない部分もありますので間違ってたら突っ込んで
下さい。
# 間違ったこと書いてしまってたら、ごめんなさい。

C言語のマニュアルのうち、scanfの項目は特に熟読しておくのが
良いらしいです。頑張ってください。

---
佐渡詩郎 (さど しろう) / e-mail : sa...@smlab.tutkie.tut.ac.jp

omi

unread,
Jun 24, 2000, 3:00:00 AM6/24/00
to

"Shiro SADO" <sa...@smlab.tutkie.tut.ac.jp> wrote in message
news:8j0rso$fm3$1...@news.tut.ac.jp...

> 理由も示さずに「scanfは使わない方がよい」と言うのは単なる
> デマの流布です。そういう本やホームページは、あまり見ない
> 方が良いでしょう。そういう本を持っていたら、古本屋に売った
> 方が良いでしょう。
> # でも、そう書いてある本って、自分は見たことないです。
> # 是非、本の名前と出版社、ホームページのURLを紹介して下さい。

本の名前は「C言語入門」で出版社は「西東社」で著者は「大角盛広」です。
その部分を引用「標準入力からはどのような入力があるか予想できず、
予期しない入力に対して脆弱なscanf()は使わないのが望ましい。
fgets()など読み取りの最大文字数が指定できる関数で安全に読み取ってから、
処理を加えるのがよい。」と書いてあります。
今見たらscanf()のかわりにfgets()を使えばいいと書いてあることに気づきました
(^_^;
よく読まずに投稿してしまってすみません。

ホームページは「猫でもわかるプログラミング 」というところで
http://www.iacnet.ne.jp/%7Eyasutaka/c_lang/intro/no_44.htm
使わない方がよいとは書いていないのですが
「scanfはあくまでも、学習用の(?)関数でいろいろ問題点があり実際にはほとん
ど使われていません。」
と書いてありました。このほかにもインターネット上ではscanf()は使わない方がよ
いみたいなことが書いて
あるところはあったと思います。どこかは覚えていませんが。

> 比較的最近(五月上旬)、fj.comp.lang.cでもscanfの話題があり、
> 詳しく論じられてます。この記事もそれを参考にしています。
> WWWで見る場合、
>
> url:
>
>
http://queen.heart.ne.jp/cgi-bin/queen?msgid=%3C38FFD884%2E8D05DF19%40cv%2Es
ony%2Eco%2Ejp%3E
>
> あたりから始めて、Followup(Followuped by:で示されて
> いるリンク)を辿ってみて下さい。

教えてくださってありがとうございます。今度見てみます。

> C言語のマニュアルのうち、scanfの項目は特に熟読しておくのが
> 良いらしいです。頑張ってください。
マニュアルのscanfの項目を見たらかなり長々と書いてありました。
こちらも見ておきます。

トークンというのはなんなのでしょうか?
けっこう本などにもトークンという言葉が使われているのですが
実はよくわからないのです。教えてくださると助かります。

佐渡詩郎さんはすごくC言語が詳しいのですね。
どうしたらそんなに詳しくなれるのでしょうか?
今までに読んだC言語の本やC言語の勉強法などを教えていただきたいです。


Shiro SADO

unread,
Jun 25, 2000, 3:00:00 AM6/25/00
to

佐渡です。

スレッド「Re: scanf のかわりは?」での
tyo...@anet.ne.jp氏の発言 <8j25p1$g55$1...@pin2.tky.plala.or.jp> より引用


>> 本の名前は「C言語入門」で出版社は「西東社」で著者は「大角盛広」です。
>> その部分を引用「標準入力からはどのような入力があるか予想できず、
>> 予期しない入力に対して脆弱なscanf()は使わないのが望ましい。
>> fgets()など読み取りの最大文字数が指定できる関数で安全に読み取ってから、
>> 処理を加えるのがよい。」と書いてあります。

scanf()が「予期しない入力に対して脆弱」という認識は、
良く見受けられる誤った認識だとおもうのですが、代替と
して例示されている方法がfgets()とsscanf()を組み合わ
せて使うやり方なら、そんなには変ではないですね。

>> ホームページは「猫でもわかるプログラミング 」というところで
>> http://www.iacnet.ne.jp/%7Eyasutaka/c_lang/intro/no_44.htm

こちらの方は、拝見したのですが、微妙な感じですね。

「scanfはあくまでも、学習用の(?)関数で
いろいろ問題点があり実際にはほとんど 使われていません。
第6章でもそのことに触れました。」
とありますが、「第6章」を見ても該当するようなことが
書いてなくて、あんまり何のことか分からなかったです。
# 「学習用の関数」と言い切るのがすごいですが。

>> トークンというのはなんなのでしょうか?
>> けっこう本などにもトークンという言葉が使われているのですが
>> 実はよくわからないのです。教えてくださると助かります。

トークン(token)ですが、この場合、

・「デリミタ(区切り文字)」(例えば、「スペース、タブ、
 改行」)で区切られた空でない(長さが1以上の)文字列
・デリミタがデリミタで囲まれてもトークンでない

です。入力(連続した文字のつながり)から、ある規則によ
って切り出された一つの「字句」と考えれば良いと思います。

元々、コンパイラの字句解析の用語なんでしょう、手元の英
和辞典だと

コンパイラーやインタープリターが字句解釈において
プログラムを構成する要素として認識するもの;
変数名・演算子など

と出てきます。構文解析の最初の段階として、入力されたベタ
な文字列が、トークンに切り出される訳です。

scanfで%dや%sを使う場合だと、scanfは入力を「トークン
(字句)」が「デリミタ(区切り)」で区切られたもの、とし
ていると考えれば良いのではないでしょうか。

# なんでトークンって言葉になるのか、
# 個人的には「終端記号」という意味合いを感じるんですが。

>> 佐渡詩郎さんはすごくC言語が詳しいのですね。
>> どうしたらそんなに詳しくなれるのでしょうか?

いいえ、fj.comp.lang.c には、自分の及びもつかないような
凄い人達が、かなりの数います。

先の記事に関しては、fj.comp.lang.c によるところが大きい
です。fj.comp.lang.c での話題は、常に一応チェックしてお
いた方が良いかも知れません。

>> 今までに読んだC言語の本やC言語の勉強法などを教えていただきたいです。

プログラムを沢山書いて、沢山読むのが良いのではないでしょ
うか。ただし、C言語の場合、一見動くように見えるが、処理
系を変えたりした途端に動かなくなるような、間違ったプログ
ラムというのが多く存在するので、プログラムを見たら、それ
を、書籍等で確かめながら理解するのが良いのではないでしょ
うか。

あと、きちんと勉強したい場合、
「プログラミング言語C」(B.カーニハン, D.リッチー, 石田 晴久訳, 共立出版)
を読んでおくのは欠かせないらしいです。
# 他のプログラミング言語は使えてCだけ知らない人向き、
# という話があります。

WWWで見れる情報では、「C言語に関するFAQ」
http://www.phys.s.u-tokyo.ac.jp/local/other-faq/comp.lang.c/c-faq-j.html
も一通り目を通しておいた方が良いと思います。
同様に
「Cプログラミング診断室」(藤原博文, 技術評論社)
http://www.pro.or.jp/~fuji/mybooks/cdiag/
もWWWで見れますが、本でも良いかも知れません。

三田典玄さんの書かれた「入門C言語」(今はオーム社?)、
林晴比古さんの書かれた「新C言語入門」(ソフトバンク)
は、避けた方が良いという話をときどき耳にします。
# オーム社、ソフトバンクの出版物は、それ以外であれば、
# お勧めできるものが多いです。C言語の入門に関しては、
# ソフトバンクの出版物(「明解C言語」(柴田望洋) あた
# り?)が良いのではないかと個人的に思っています。

他に、「JIS X3010 (プログラム言語C)」(日本規格協会)が、
良く話題にのぼります。日本規格協会の出版物です。
もしかしたら、必須かも知れないのですが、自分は持ってな
いです。学校の図書館で眺めてみたのですが、思ったより分
かりやすく記述されています。
# 買い方を良く知らないんですが、書店で注文すれば購入可
# 能なんでしょうか?
## 今、やや貧乏なので、教えて貰っても、すぐには買えない
## ですが。

# 自分は、手を抜いて、JIS X3010でなく、「ANSI C 言語大
# 事典」(坂本 文監訳, パーソナルメディア社)を使ってま
# すが、以前「それ、あんまり良くないよ」といわれて、や
# やショックでした。

Takao Ono

unread,
Jun 25, 2000, 3:00:00 AM6/25/00
to
小野@名古屋大学 です.

<8j3s2k$5ga$1...@news.tut.ac.jp>の記事において
sa...@smlab.tutkie.tut.ac.jpさんは書きました。
sado> 他に、「JIS X3010 (プログラム言語C)」(日本規格協会)が、
sado> 良く話題にのぼります。日本規格協会の出版物です。
sado> もしかしたら、必須かも知れないのですが、自分は持ってな
sado> いです。学校の図書館で眺めてみたのですが、思ったより分
sado> かりやすく記述されています。
sado> # 買い方を良く知らないんですが、書店で注文すれば購入可
sado> # 能なんでしょうか?
最も簡単なのは, 日本規格協会に注文することじゃないでしょうか.
http://www.jsa.or.jp/ からどうぞ. その気になれば, ISO の出版物も
買えます. 私はこの方法で ISO/IEC 9899:1999 (去年決まった C99) を
入手しました.
# 昨日届いたので今眺めているところです.

sado> ## 今、やや貧乏なので、教えて貰っても、すぐには買えない
sado> ## ですが。
ちなみに C99 は 28,056円でした.
--
名古屋大学 工学部 電子工学科 平田研究室
小野 孝男

Yuki Shiino

unread,
Jun 25, 2000, 3:00:00 AM6/25/00
to
 椎野です。

佐渡さんの記事<8j0rso$fm3$1...@news.tut.ac.jp>から
> C言語のマニュアルのうち、scanfの項目は特に熟読しておくのが
> 良いらしいです。頑張ってください。

 C言語のマニュアルには"%d"で整数が入力できるなどと書いてあるので
その通りにしたら上手くいかない、ということが巷ではおきてます。
 一つには「熟読」してないからなのですが、もう一つにはscanfの使い
方なんて何処にも書いてないからなんです。
 scanfにはこんな書式指定子がありこんな機能がある、ということは書
いてあるのですが、ではどの様に使うべきかについては解説していない。
reference manualとはそういうものでhow toについては沈黙してます。
勿論、心得のある人ならばreference manualを読むだけでhow toまで読
み取る(そこにある問題点まで読み取る)ことも出来ますが、初心者は
そうもいかない。
 誰か"How to use scanf."とか「scanf 十の基本技」なんてものを纏め
てくれれば良いんですけど。


 プログラマに必須の能力として、(例外的なものも含めて)起こり得
る全ての場合について考える能力があります。これが十分発達していな
いと色々面倒なバグを埋め込むことになります。例えば、
average = total/N;
といったコードで N!=0 は保証されているのか、とか。scanfでNを入力
しているのなら、Nが正数であることは確認してあるのでしょうか。
 この「色々面倒なバグ」が埋め込まれやすいのが「初心者のscanf」だ
と思います。「予想していない入力に対して動作がおかしくなる」とい
うのは正に「例外的なものも含めて起こり得る全ての場合について考え
る能力」の欠落によるものでしょう。
 もし整数以外の入力がされたら、という局面を想像できるのであれば
scanfに危険性など微塵もないと言っていいでしょう。reference manual
さえあれば何も問題ありません。

 そこで提案です。scanfを使うことによりこの能力を育成することは出
来ないものでしょうか。例えば、整数を入力したいのなら、
[1] 必ず入力文字列が整数を表わしていることを保証できるか。
[2] 正しい整数が入力されたことを確認できるか。
[3] 入力が期待したものではない時にどうするか。
といったことが考えられるのならscanfは危険ではないだろうし、この様
な思考が出来ることはscanfの使用以外でも役に立つ筈です。

 [1]が思い浮かべば問題の半分は解決していると思うんだけど。[1]が分
かるなら当然[2]の確認が必要なのが分かる筈。[2]の確認の結果、期待し
た入力でないことが分かった場合、当然[3]の問題に直面する筈。そして
エラー検出とエラー処理の重要性と共に、テストの重要性が理解できる様
になり……。scanfは危ないなどと言われている原因は全て取り除かれて
いるでしょう。
 scanfを使って使って、テストしてテストして、デバッグしてデバッグ
して……。そうやってprogrammingを覚えることは出来ないものでしょう
か。「使うな!」と言うのではなく「使えるようになれば一人前」と言い
たい。


 Subjectの「scanf のかわりは?」についても一言。
 scanfは危険だとよく言われますが、本当は入力処理が難しいだけなの
です。scanfを使おうと使うまいと入力処理は本質的に難しいものです。
 scanfの難しさがscanf固有のものではない証拠に、先に挙げたポイント
[1][2][3]は入力処理に対するヒントです。これらを解決すればscanfの問
題が解決するのは、scanfの問題が結局、入力処理の問題だからです。
scanfの代わりを探すよりも入力処理そのものが抱える問題を考える方が
解決への近道になると信じています。


 つい長々と書いてしまいました。最後に簡単な指摘を幾つかして終わり
にします。


> sprintf( fmt, "%%%ds", sizeof(buf)-1 );

sprintf(fmt, "%%%us", sizeof(buf)-1);
出来れば、
sprintf(fmt, "%%%lus", (unsigned long)(sizeof(buf)-1));


> 一行まるまる読み込みたい場合などは、fgets()を用いても良い
> ですが、scanfと組み合わせて使う場合、一行に書かれている
> トークンすべてを読み終っても行末の改行記号を消費しません
> (だって変換してないから)から、
>
> scanf("%*[ \t]");
> scanf("%*[\n]");
>
> などで捨ててから、fgets()するなどします。

 「次の改行文字までを読み飛ばす」
   =「改行文字以外を読み飛ばす」+「改行文字を読み飛ばす」
   = scanf("%*[^\n]%*1[\n]")

 因みに、"%*[ \t]"では \v, \f などが読み飛ばせない。


NISHIYAMAさんの記事<8666qzo...@koke.nibb.ac.jp>から
> Hiroki Kashiwazaki <r...@juno.dti.ne.jp> writes:
>
> > 柏崎@東京です。

> > gets で取り込んで、あとは atof とかで任意の型に変換。
> 人間からの入力に対しては、getsは使ってはならないのでは?

 atofもまずいです。


--
椎野 裕樹 <yu...@cds.ne.jp>


Shiro SADO

unread,
Jun 25, 2000, 3:00:00 AM6/25/00
to

佐渡です。

小野さんありがとうございます。

スレッド「規格書 (Re: scanf のかわりは?)」での
ta...@hirata.nuee.nagoya-u.ac.jp氏の発言 <8j4av2$li2$1...@henry.hirata.nuee.nagoya-u.ac.jp> より引用


>> sado> ## 今、やや貧乏なので、教えて貰っても、すぐには買えない
>> sado> ## ですが。
>> ちなみに C99 は 28,056円でした.

# うわあ、そんなにするんだ、って一瞬思いました。
いや、価値に照らし合わせて考えれば、別にめちゃ
くちゃ高いとか、そんなことは全然ないんでしょう
が。

JIS X3010は、追補(2000円)と合わせて10000円ですか。
# 昔は処理系が何万円もしたことを考えれば、
# そんなにめちゃくちゃは高くないように思います。
# やや不安な種類の入門書を何冊も買うことを考えれば、
# 個人でプログラムを書く人だって購入を検討して
# 良い金額ですね。

KATAYAMA Yoshio

unread,
Jun 26, 2000, 3:00:00 AM6/26/00
to
In article <8j547b$t96$2...@news.cds.ne.jp>,
Yuki Shiino <yu...@cds.ne.jp> writes:

> scanfにはこんな書式指定子がありこんな機能がある、ということは書
>いてあるのですが、ではどの様に使うべきかについては解説していない。
>reference manualとはそういうものでhow toについては沈黙してます。

規格書でも幾つかの例が載っていますが、その程度のことも書かれてい
ないのでしょうか。>巷の reference manual

# how to には ほど遠いかも知れませんが、、、
--
片山@PFU

Iwao Watanabe

unread,
Jun 26, 2000, 3:00:00 AM6/26/00
to
"Shiro SADO" <sa...@smlab.tutkie.tut.ac.jp> wrote in message
news:8j3s2k$5ga$1...@news.tut.ac.jp...

> 他に、「JIS X3010 (プログラム言語C)」(日本規格協会)が、
> 良く話題にのぼります。日本規格協会の出版物です。
> もしかしたら、必須かも知れないのですが、自分は持ってな
> いです。学校の図書館で眺めてみたのですが、思ったより分
> かりやすく記述されています。
> # 買い方を良く知らないんですが、書店で注文すれば購入可
> # 能なんでしょうか?

私の手元には、以下の書籍があります。
近くの本屋さんにお願いして取り寄せてもらいました。

JISハンドブック 情報処理
プログラム言語編 - 1997
財団法人 日本規格協会
定価: 13,000円
ISBN4-542-12889-X

これにはC以外にも、 Fortran, COBOL, Full BASIC, NDL, SQL, Pascal
Ada, MUMPS, POSIX API (一部) 等が含まれています。


Yuki Shiino

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to
 椎野です。

片山さんの記事<KATE.00Ju...@sims211.trad.pfu.co.jp>から

 勿論、幾らかの例が載っていることは承知していますし、私自身お世話に
もなります。しかし、そんな程度の例では全く不足の様です。(読解力の不
足が主なのか、例の不足が主なのかは分かりませんが。十分な読解力のある
人を熟練者と呼び、それがない人を初心者と呼ぶのかもしれない。)

 初心者にはreference manualではなく"An introduction to scanf"が必要
な様に見えます。K&Rの様にscanfは最後に(構造体やポインタ、関数へのポ
インタなどよりも後で)教えるのならreference manual(と幾ばくかの例)
でも十分なのかもしれませんが、真っ先にprintfとscanfを使いたがる人たち
にはhow to集が必要とされていると思います。
 良い師に恵まれず、初心者にも関わらず、早期に入力処理を行いたい人は
少なくないと思うので(だからscanfで問題を起こすのだと思うので)、how
to集があっても良いんじゃないかと思う次第です。

 reference manualの読み方が悪いと言えばそれまでですが、そういったと
ころも含めて、初心者なのかな、と思います。

--
椎野 裕樹 <yu...@cds.ne.jp>


KATAYAMA Yoshio

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to
In article <8j7ti1$pdd$1...@news.cds.ne.jp>,

> 勿論、幾らかの例が載っていることは承知していますし、私自身お世話に
>もなります。しかし、そんな程度の例では全く不足の様です。(読解力の不
>足が主なのか、例の不足が主なのかは分かりませんが。十分な読解力のある
>人を熟練者と呼び、それがない人を初心者と呼ぶのかもしれない。)

なるほど。

>でも十分なのかもしれませんが、真っ先にprintfとscanfを使いたがる人たち
>にはhow to集が必要とされていると思います。

FOTRAN に苦しめられた && μPLAN や GAME などの *低級*言語を以前
に慣れていたため、「真っ先にprintfとscanfを使いたがる人」ではな
かったので、、、
--
片山@PFU

Shinji KONO

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to
河野 真治@琉球大情報工学です。片山さんもGAME使いだったのね。

In article <KATE.00Ju...@sims211.trad.pfu.co.jp> ,
ka...@pfu.co.jp (KATAYAMA Yoshio) writes

>FOTRAN に苦しめられた && μPLAN や GAME などの *低級*言語を以前
>に慣れていたため、「真っ先にprintfとscanfを使いたがる人」ではな
>かったので、、、

FORTRAN は苦しかった。FORTRAN の演習で、EBCDICコード表を印刷
するプログラムを書いていたら、TA に「なにやってんの?」とか言
われました。発想がマイクロコンピュータなんだよね。

そんなことをやっていると、printf/scanf って、まず、疑いのまなこ
で見てしまう...

FORTRANの書式は、コンパイルされるのだと信じていた昔が懐かしい
です。まさか実行時に解釈するなんて思いうかばなかった。scanf
なんかも、いったん、C にコンパイルされるとか思っていたりして。

---
Shinji KONO @ Information Engineering, University of the Ryukyus
河野真治 @ 琉球大学工学部情報工学科

Nakamura Akifumi

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to
中村っす。ごみ。

fj.comp.lang.c の <18420.9...@rananim.ie.u-ryukyu.ac.jp> の
記事において 2000年06月27日(火) 04時51分18秒頃、
Shinji KONOさんは書きました。

>FORTRANの書式は、コンパイルされるのだと信じていた昔が懐かしい
>です。まさか実行時に解釈するなんて思いうかばなかった。scanf
>なんかも、いったん、C にコンパイルされるとか思っていたりして。

そういう勘違いをせずに済ますことが出来た「ので」、
Cは(K&Rは、というべきなんだろうか)有り難いなぁ、と
思っています。
モノゴトの切り分けが凄くはっきりしてる…

#あれ?pascalとかでも良かったのかな?

Kumano Akio

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to
くまの@FFC です。

Shinji KONO wrote:

> FORTRAN は苦しかった。FORTRAN の演習で、EBCDICコード表を印刷
> するプログラムを書いていたら、TA に「なにやってんの?」とか言
> われました。発想がマイクロコンピュータなんだよね。

「発想がマイクロコンピュータなんだよね」の、意味が分かりません。
解説希望。

端末なんかが発想に無いから、という意味でしょうか?

--
by Kumano Akio mailto:a-k...@ffc.co.jp / HHE0...@nifty.ne.jp
__________________________________________________________________
Fuji Electric Co., Ltd. Tel:042-585-1167 Fax:042-583-0406

Shinji KONO

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to
河野 真治@琉球大情報工学です。

In article <39586446...@ffc.co.jp> ,
Kumano Akio <a-k...@ffc.co.jp> writes
>「発想がマイクロコンピュータなんだよね」の、意味が分かりません。

マイクロコンピュータのプログラムって、文字コードがわからない
とプログラミングできなかったんです。だから、ASCII なんていう
雑誌ができたわけでしょう。でも、FORTRAN の人は、EBCDIC なん
て知らなくてもいいから、EBCDIC なんていう雑誌はできなかった。

>解説希望。

outchar, keysense, inchar だけでプログラムを作る

debug 用に、ret 命令の後ろは3byte nop を入れる

円を書くのに整数で計算できるDDSを使う

プログラム言語を見ると、勝手に決めたアドレスを呼び出す機能が
あるかどうか調べる
((void (*)()) 0x800020)();
とか? (お、かろうじて fj.comp.lang.c だ...)

cc -S の出力を見て、安心する

adb/gdb で、disassemble がついているのに感動する

adb でアセンブラを修正して実行する

IP アドレスをつい16進数に直して考える

かけ算 FF ができる (僕はできません...)

紙テープが読める

ボードが動かないと、すぐパスコンを足す

逆差ししてボードを壊したことがあるので、電源ラインにはダイオードが入っている

いらいらすると、コンデンサをAC100Vにさして爆発させて遊ぶ

コンピュータのスイッチを入れた後、匂いをかぐ癖がある

CPU の鳴きで、何をしているのか言い当てることができる

コンパイラの動作をVRAMで見るのが好き

core dump した時に、system が落ちてないか心配になる

reset を押すのを躊躇しない

どんな複雑な立ち上げ手順でも平気である

オープンリール(カセットでも可)からブートする

(なんなんでしょうね...)

Nakamura Akifumi

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to
中村っす。

fj.comp.lang.c の <18878.9...@rananim.ie.u-ryukyu.ac.jp> の
記事において 2000年06月27日(火) 08時56分37秒頃、
Shinji KONOさんは書きました。

>かけ算 FF ができる (僕はできません...)

もしかして「他は出来る」のでしょうか?

>(なんなんでしょうね...)

Real Programmerっすか

Kusakabe Youichi

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to
In article <20000627182...@nifty.ne.jp>, BXQ0...@nifty.ne.jp (Nakamura Akifumi) wrote:
> Shinji KONOさんは書きました。
> > かけ算 FF ができる (僕はできません...)
>
> もしかして「他は出来る」のでしょうか?

そういえばそのむかしりきたけ少年はできましたね > 掛け算のff

> Real Programmerっすか

パイナップルピザは食べますか?

ヘ_ヘ ____________________________
ミ・・ ミ vo...@merope.pleiades.or.jp
( ° )~ 日下部陽一
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Kumano Akio

unread,
Jun 27, 2000, 3:00:00 AM6/27/00
to
くまの@FFC です。

Shinji KONO wrote:

> In article <39586446...@ffc.co.jp> ,
> Kumano Akio <a-k...@ffc.co.jp> writes
> >「発想がマイクロコンピュータなんだよね」の、意味が分かりません。
>
> マイクロコンピュータのプログラムって、文字コードがわからない
> とプログラミングできなかったんです。だから、ASCII なんていう
> 雑誌ができたわけでしょう。でも、FORTRAN の人は、EBCDIC なん
> て知らなくてもいいから、EBCDIC なんていう雑誌はできなかった。

あのセリフは TA にかかるのではなく、河野さんにかかるんですね、
納得。


> debug 用に、ret 命令の後ろは3byte nop を入れる

昔、ハンドアセンブルでプログラムを組んだ時期もあったので、これ、
わかります。

最近、SPARC を良く扱うので、ほとんど、アセンブラは見ません。

スタックポインタが欲しくて、C のプログラムを逆アセンブルした
くらいかなあ。

でも、いまだに CPU の LED は、欲しいです。動いているのかどうか、
とても気になっちゃって。というわけで、最近の安いルーターの
B1 とかが、ちかちかしていると、とても安心します。

IIJIMA 'Delmonta' Hiromitsu

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
いいじま@東大文学部です。

佐渡> 他に、「JIS X3010 (プログラム言語C)」(日本規格協会)が、
佐渡> 良く話題にのぼります。日本規格協会の出版物です。
佐渡> もしかしたら、必須かも知れないのですが、自分は持ってな
佐渡> いです。学校の図書館で眺めてみたのですが、思ったより分
佐渡> かりやすく記述されています。
佐渡> # 買い方を良く知らないんですが、書店で注文すれば購入可
佐渡> # 能なんでしょうか?

単品の規格票の他に、同種の規格をまとめた『JIS ハンドブック』
というシリーズもありますよね。文庫判(四六だったかな?)で、
C 言語が載っているのはたしか「情報処理・プログラム言語編」。

ハンドブックは 6000 円くらいだったと思います。
単品だと結構高額になるかもしれません。
#単品の規格票は、数百円という安いものから、1万円以上のものまで
#あります。ちなみに、JIS X0208-1997 は税抜きで 14000 円。

ただ、ハンドブックには解説編がないのが悩みの種。

小野> 最も簡単なのは, 日本規格協会に注文することじゃないでしょうか.
小野> http://www.jsa.or.jp/ からどうぞ. その気になれば, ISO の出版物も
小野> 買えます. 私はこの方法で ISO/IEC 9899:1999 (去年決まった C99) を
小野> 入手しました.
小野> # 昨日届いたので今眺めているところです.

JIS ハンドブックなら大きな本屋には一通り置いてあります。
東京なら神保町の書泉とか、三省堂とか。
八重洲・丸善・紀伊国屋にはあったかどうか記憶が定かでないです。

東京近郊在住なら、赤坂の日本規格協会に直接出向くという方法も
あります。

それから、図書館の収蔵状況も調べてみるといいと思います。
学生さんなどで大学図書館が使えるなら、図書館の利用も検討に値します。
私は JIS X0208 の結構なページ数を図書館のやつからコピーしました。

蔵書検索は、各大学のサイトか、または http://webcat.nacsis.ac.jp/
へどうぞ。

☆-- 飯嶋 浩光 ----------------------------------------------☆
|IIJIMA 'Delmonta' Hiromitsu an der Universitaet Tokyo |
☆-----------------------------------------------------------☆
|【宣伝】Windows 95/98 管理人のための MS-DOS 基礎講座 |
http://user.ecc.u-tokyo.ac.jp/~l94102/dos/
☆-------------------------- L94...@mail.ecc.u-tokyo.ac.jp --☆

IIJIMA 'Delmonta' Hiromitsu

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
いいじま@東大文学部です。

> 初心者の方などが無限ループを避けようとして、
>
> int x;
> char buf[256];
>
> x = atoi(gets(buf));

(略)


> などと書く場合がありますが、このように書かれたプログラム
> は、無限ループにはなりませんが、容易にバッファオーバーラン
> が引き起されてしまいます。

こういうときは fgets() を使うのが定石ですよね。

なので、あえて手抜きで済ますテストプログラムでない限り、
私の場合は gets() は無条件で使用禁止としています。

scanf() は私の場合、手抜きで使うことはありますが、やはり
無限ループ対策が面倒なので、ふだんは fgets() してから、
atoi()、atof()、sscanf() などを使うことが多いです。

fgets() は
○行が長すぎたら、バッファにおさまる部分まで読み込み、
 残りはそのまま未消費で残す
○改行 '\n' がバッファに残る
という点が面倒といえば面倒なので、私は

char *my_fgets(char *buf, int n, FILE *fp)
{ /* 本当は n は size_t にすべきだけど fgets() に合わせる */
char *ret = fgets(buf, n, fp);

/* エラー時に buf[0]==0 は保証されてますよね?>>識者 */
p = strchr(buf, '\n');

if (p!=NULL) /* 改行まで読み込まれた */
*p = 0;
else /* 改行までは読み込まれていない */
{
int c;

while (c=getchar(), c!='\n' && c!=EOF))
;
}

return ret;
}

としてから
x = atoi(my_fgets(buf, sizeof buf, stdin));

sscanf(buf, "%d %d", &x, &y);
のようにすることが多いです。

IIJIMA 'Delmonta' Hiromitsu

unread,
Jun 28, 2000, 3:00:00 AM6/28/00
to
いいじま@東大文学部です。

> > sprintf( fmt, "%%%ds", sizeof(buf)-1 );
>
> sprintf(fmt, "%%%us", sizeof(buf)-1);
> 出来れば、
> sprintf(fmt, "%%%lus", (unsigned long)(sizeof(buf)-1));

ですね。元の書き方だと、環境によっては fmt が必ず "%0s" に
なるかもしれませんから。

Majima Kenichi

unread,
Jun 29, 2000, 3:00:00 AM6/29/00
to
Kumano Akioさんは<39589110...@ffc.co.jp>でこうおっしゃいました。

>> debug 用に、ret 命令の後ろは3byte nop を入れる
>
>昔、ハンドアセンブルでプログラムを組んだ時期もあったので、これ、
>わかります。

 Cの標準ライブラリをディスアセンブルしていたら、頻繁にnopが出てきま
した。まさかタイミングを取るためじゃないだろうし、何のためのnopなんだ
ろうと永らく(10年くらい。爆)疑問に思っていましたが、こういうことだった
んですね。

# 常識?

--
/*******************************
Majima Kenichi
ke...@pp.iij4u.or.jp
*******************************/

Kazuo Fox Dohzono

unread,
Jun 29, 2000, 3:00:00 AM6/29/00
to
堂園です.

In article <8jddu4$c5l$1...@news00.iij4u.or.jp>
Majima Kenichi <ke...@pp.iij4u.or.jp> writes:

> Kumano Akioさんは<39589110...@ffc.co.jp>でこうおっしゃいました。
> >> debug 用に、ret 命令の後ろは3byte nop を入れる
> >
> >昔、ハンドアセンブルでプログラムを組んだ時期もあったので、これ、
> >わかります。
>
>  Cの標準ライブラリをディスアセンブルしていたら、頻繁にnopが出てきま
> した。まさかタイミングを取るためじゃないだろうし、何のためのnopなんだ
> ろうと永らく(10年くらい。爆)疑問に思っていましたが、こういうことだった
> んですね。

10 年くらい前だと既にハンドアセンブルの時代ではないでしょう. alignment
の為である, に一票.

# MIPS じゃないですよね :-p

--
Kazuo Fox Dohzono / doh...@hf.rim.or.jp

[12],(6,9),0,0,2

KATAYAMA Yoshio

unread,
Jun 29, 2000, 3:00:00 AM6/29/00
to
In article <3958DA06...@mail.ecc.u-tokyo.ac.jp>,

IIJIMA 'Delmonta' Hiromitsu <L94...@mail.ecc.u-tokyo.ac.jp> writes:

> char *ret = fgets(buf, n, fp);
> /* エラー時に buf[0]==0 は保証されてますよね?>>識者 */

If end-of-file in encountered and no characters have been read
into the array, the contents of the array remain unchanged and
null pointer is returned.

だそうです。
--
片山@PFU

KUROSAWA Takashi

unread,
Jun 29, 2000, 3:00:00 AM6/29/00
to
Tabby as くろさわ@秩父です。

Majima Kenichi <ke...@pp.iij4u.or.jp> wrote in
message <8jddu4$c5l$1...@news00.iij4u.or.jp>:


> >> debug 用に、ret 命令の後ろは3byte nop を入れる
> >
> >昔、ハンドアセンブルでプログラムを組んだ時期もあったので、これ、
> >わかります。
>
>  Cの標準ライブラリをディスアセンブルしていたら、頻繁にnopが出てきま
> した。まさかタイミングを取るためじゃないだろうし、何のためのnopなんだ
> ろうと永らく(10年くらい。爆)疑問に思っていましたが、こういうことだった
> んですね。

可変長命令の CPU では、リンクするまでポインタサイズが不明な場
合、とりあえず一番長い語長の分を確保しておいて、短いポインタ
で表現可能な事が判ると残りを nop で埋める場合があります。
M68k で顕著に観察出来ました。で、M68k では nop で命令実行が滞
るので、他の無害な命令で置き換えるフィルタを組んだ記憶があり
ます。

  Tabby as くろさわ
  ta...@yk.rim.or.jp
  http://www.yk.rim.or.jp/‾tabby/


Majima Kenichi

unread,
Jun 29, 2000, 3:00:00 AM6/29/00
to
Kazuo Fox Dohzonoさんは<8jenbb$5pm$1...@netnews.rim.or.jp>でこうおっしゃいました。
>> Kumano Akioさんは<39589110...@ffc.co.jp>でこうおっしゃいました。

>> >> debug 用に、ret 命令の後ろは3byte nop を入れる
>> >
>> >昔、ハンドアセンブルでプログラムを組んだ時期もあったので、これ、
>> >わかります。
>>
>>  Cの標準ライブラリをディスアセンブルしていたら、頻繁にnopが出てきま
>> した。まさかタイミングを取るためじゃないだろうし、何のためのnopなんだ
>> ろうと永らく(10年くらい。爆)疑問に思っていましたが、こういうことだった
>> んですね。
>
>10 年くらい前だと既にハンドアセンブルの時代ではないでしょう. alignment
>の為である, に一票.

 68000です。具体的に言うと、X68000用のXCのライブラリです。nopがいくつ
か(3つくらい)並んでいたように思います。
 alignmentのためなら、そんなに要らないような気がするのですが。

 何分昔のことなので勘違いかもしれません。
 でも、alignmentのためのnopなら疑問には思わなかったような気もするし。

Yuki Shiino

unread,
Jun 30, 2000, 3:00:00 AM6/30/00
to
 椎野です。

飯嶋さんの記事<3958DA06...@mail.ecc.u-tokyo.ac.jp>から


> scanf() は私の場合、手抜きで使うことはありますが、やはり
> 無限ループ対策が面倒なので、ふだんは fgets() してから、
> atoi()、atof()、sscanf() などを使うことが多いです。

 fj.comp.lang.cでも何度か紹介されていますが、"%*s"や
"%*[^\n]%*1[\n]"は試されましたか。fgetsの方が簡単でしたか。
 それからatoXは避けてstrtoXを使い、errnoをチェックしましょう。


> char *my_fgets(char *buf, int n, FILE *fp)
> { /* 本当は n は size_t にすべきだけど fgets() に合わせる */

> char *ret = fgets(buf, n, fp);
>
> /* エラー時に buf[0]==0 は保証されてますよね?>>識者 */

> p = strchr(buf, '\n');
>
> if (p!=NULL) /* 改行まで読み込まれた */
> *p = 0;
> else /* 改行までは読み込まれていない */
> {
> int c;
>
> while (c=getchar(), c!='\n' && c!=EOF))
> ;
> }
>
> return ret;
> }
>
> としてから
> x = atoi(my_fgets(buf, sizeof buf, stdin));
> や
> sscanf(buf, "%d %d", &x, &y);
> のようにすることが多いです。

 my_fgetsが行末を捨て去ったかどうかが分からないんですが、問題
ないのでしょうか。

 sscanf(buf, "%d %d", &x, &y)に対して"123 0120-456-789\n"と入力
すると、x=123, y=120になるのは問題ないのでしょうか。(0120-456-
789は整数ではなく電話番号の様に見えるんですが、y=120はユーザの意
図した通りの動作なのでしょうか。)
 折角fgets+sscanfにするのなら、

char s[2];
errno = 0;
if (sscanf(buf, "%d%d%1s", &x, &y, s)==2 && errno==0)
; /* 期待通りの入力 */
else
; /* 何かおかしな入力 */

とするとか。但し、"%d%d%1s"ではなく"%d%f%1s"だとまた困ったことに
なります。無限ループなんかよりこちらの方が余程面倒です。
 期待する入力フォーマットが単純なものであれば、

int n1=0, n2=0;
sscanf(buf, "%*[0-9] %*[0-9]%n%*s%n", &n1, &n2);
/* n1!=0 && n2==0 ならば期待したフォーマットの入力 */
sscanf(buf, "%d%d", &x, &y);

といった方法もありますが、正規表現が使えないのでこの方法にも限度
があります。(指数表現を認めない小数点数などに対しては有効なんで
すけど。)

--
椎野 裕樹 <yu...@cds.ne.jp>


ohsaki takayuki

unread,
Jun 30, 2000, 3:00:00 AM6/30/00
to
In article <8jfhlp$o7r$1...@netnews.rim.or.jp>, ta...@yk.rim.or.jp says...

>可変長命令の CPU では、リンクするまでポインタサイズが不明な場
>合、とりあえず一番長い語長の分を確保しておいて、短いポインタ
>で表現可能な事が判ると残りを nop で埋める場合があります。
>M68k で顕著に観察出来ました。で、M68k では nop で命令実行が滞
>るので、他の無害な命令で置き換えるフィルタを組んだ記憶があり
>ます。

それは nop が nop じゃなくて、次の命令への無条件JUMPだからですね
しかし、無条件でいれられる無害な命令って何だろう?
#長いポインタの命令になおした方が早かったりして :-)


Kazuo Fox Dohzono

unread,
Jun 30, 2000, 3:00:00 AM6/30/00
to
堂園です.

In article <8jgpb8$l...@infonet.sedept.cac.co.jp>
ohs...@cac.co.jp (ohsaki takayuki) writes:

> それは nop が nop じゃなくて、次の命令への無条件JUMP

m68k では pipeline の flush だと何処かで聞いた記憶があるんですが….

# 040 で 6~8 サイクルほどかかる命令だったハズ.

IIJIMA 'Delmonta' Hiromitsu

unread,
Jun 30, 2000, 3:00:00 AM6/30/00
to
いいじま@東大文学部です。

>  my_fgetsが行末を捨て去ったかどうかが分からないんですが、問題
> ないのでしょうか。

えっと、すいません、ちょっとよくわからないので詳しく教えて
いただけないでしょうか。

元記事のプログラムは、c=getchar() を c=gets(fp) に直せば、
きちんと改行まで読み飛ばす作業をしているはずだと思うのですが、
それで問題なのでしょうか。

>  sscanf(buf, "%d %d", &x, &y)に対して"123 0120-456-789\n"と入力
> すると、x=123, y=120になるのは問題ないのでしょうか。(0120-456-
> 789は整数ではなく電話番号の様に見えるんですが、y=120はユーザの意
> 図した通りの動作なのでしょうか。)

簡単なプログラムならそれでいいつもりです。
もっと面倒なケースではしっかりと構文解析すると思います。

#最近は perl で
# if ($buf =~ /^\s*(\d+)\s+(\d+)\s*$/)
# { ($x,$y) = ($1,$2);}
# else
# {何らかのエラー処理}

#と逃げています。簡単なプログラムだと \s*$ の 4 文字を抜いてしまう
#こともあります。

keizi kounoike

unread,
Jun 30, 2000, 3:00:00 AM6/30/00
to
鴻池です。

"IIJIMA 'Delmonta' Hiromitsu" <L94...@mail.ecc.u-tokyo.ac.jp> wrote in
message news:395C6510...@mail.ecc.u-tokyo.ac.jp...
> いいじま@東大文学部です。
>

"Yuki Shiino" <yu...@cds.ne.jp> wrote in message
news:8jfvm9$s0r$1...@news.cds.ne.jp...
>  椎野です


> >  my_fgetsが行末を捨て去ったかどうかが分からないんですが、問題
> > ないのでしょうか。
>
> えっと、すいません、ちょっとよくわからないので詳しく教えて
> いただけないでしょうか。
>

椎野さんは,buf に n 以上の読み込みがあった場合に p!=NULL とはならないから
while は実行されないのではといっているような気がしますが。あと,while
(c=getchar(), c!='\n' && c!=EOF)) では,無限ル-プになるように思いますが,気
のせいでしょうか。まあ,めったなことでは,ここには来ないとは思いますが。(間
違っていたらすいません。)

"IIJIMA 'Delmonta' Hiromitsu" <L94...@mail.ecc.u-tokyo.ac.jp> wrote in
message news:3958DA06...@mail.ecc.u-tokyo.ac.jp...
> いいじま@東大文学部です。


>
>
> char *my_fgets(char *buf, int n, FILE *fp)
> { /* 本当は n は size_t にすべきだけど fgets() に合わせる */
> char *ret = fgets(buf, n, fp);
>
> /* エラー時に buf[0]==0 は保証されてますよね?>>識者 */

これは,片山さんの解説によるとそうではないようです。

>>"KATAYAMA Yoshio" <ka...@pfu.co.jp> wrote in message
news:KATE.00Ju...@sims211.trad.pfu.co.jp...


>> If end-of-file in encountered and no characters have been read
>> into the array, the contents of the array remain unchanged and
>> null pointer is returned.

ところで,EOFに出くわしかつ一文字も読んでない状態ってどんな時なんだろう?。
ん,でもこれはこの時 null pointer を返すってことで,エラー時のことではない
か。でもエラー時にはnull pointer を返すからこれがエラー時ってことかな。よく
分からなくなってきた。

> p = strchr(buf, '\n');
>
> if (p!=NULL) /* 改行まで読み込まれた */
> *p = 0;
> else /* 改行までは読み込まれていない */
> {
> int c;
>
> while (c=getchar(), c!='\n' && c!=EOF))
> ;
> }
>
> return ret;
> }

--
********************************
< keizi kounoike >
********************************


Kazuo Fox Dohzono

unread,
Jun 30, 2000, 3:00:00 AM6/30/00
to
堂園です.

In article <8jh497$llr$1...@netnews.rim.or.jp>


doh...@hf.rim.or.jp (Kazuo Fox Dohzono) writes:

> m68k では pipeline の flush だと何処かで聞いた記憶があるんですが….

motolora から 68040 のユーザーズマニュアルを持ってきたんですが, やはり
現在処理中の全てのバスアクセスが終了するまで次の命令フェッチを行わない
ようです. I/O 命令の直前に入れてバスアクセスをシリアライズしたりするの
に用いられるとか.

# これが直後の命令への分岐という動作で説明可能かどうかまでは読み込んで
# いません. 命令のビットパターンを見ればわかるんだろうけど.

Yuki Shiino

unread,
Jul 1, 2000, 3:00:00 AM7/1/00
to
 椎野です。

飯嶋さんの記事<395C6510...@mail.ecc.u-tokyo.ac.jp>から


> >  my_fgetsが行末を捨て去ったかどうかが分からないんですが、問題
> > ないのでしょうか。
>
> えっと、すいません、ちょっとよくわからないので詳しく教えて
> いただけないでしょうか。
>

> 元記事のプログラムは、c=getchar() を c=gets(fp) に直せば、
> きちんと改行まで読み飛ばす作業をしているはずだと思うのですが、
> それで問題なのでしょうか。

 c=getchar() を c=gets(fp) に直すんですか。この部分は何か勘違いされ
ているか、書き間違いではないでしょうか。

 私が言いたいことは、my_fgetsの呼び出し側では、my_fgetsが一行全体を
バッファに読み込んだのか、それとも一行の初めのn文字を読み込んだのか
が分からない、ということです。
 バッファサイズが小さ過ぎた為に一行全てを読み込めなかった場合には、
呼び出し元へそれを伝える必要があるのではないか、ということです。そう
でないと、呼び出し元からは一行全体の読み込みに成功したのかどうかが分
かりません。
 例えば、一行の長さがnバイトを超えるデータは一切構文解釈をせずに読
み捨て、エラーメッセージを表示したい場合には、my_fgetsは使えません。
中途半端に読み込んだデータを処理するのは一般に危険です。
 私ならmy_fgetsの返り値を真偽値にし、行末を読み捨てた場合には0を、
読み捨てなかった場合には1を返す様にするでしょう。(好みによっては0と
1が逆でも良いでしょう。)返り値をバッファへのポインタにすることによ
り、Cライクな表記が出来るのは承知ですが、この問題を放置するよりは良
いと思います。呼び出し元がこのmy_fgetsの返り値をチェックするかどうか
は呼び出し元の自由です。たとえ一行全てを読み込めていなくとも処理を続
行したいのなら返り値を無視すれば良いです。

 飯嶋さんのmy_fgetsは仕様に少々問題があるのではないでしょうか。或い
は用途が特化し過ぎていないでしょうか。(getsはバッファが不足しない限
り安全ですが、一般にそれを保証することが出来ない点が問題です。同様に
my_fgetsが無条件に行末を読み捨てて良い場合には問題ありませんが、一般
にはそうではないでしょう。)


> >  sscanf(buf, "%d %d", &x, &y)に対して"123 0120-456-789\n"と入力
> > すると、x=123, y=120になるのは問題ないのでしょうか。(0120-456-
> > 789は整数ではなく電話番号の様に見えるんですが、y=120はユーザの意
> > 図した通りの動作なのでしょうか。)
>
> 簡単なプログラムならそれでいいつもりです。
> もっと面倒なケースではしっかりと構文解析すると思います。

 そうですね。あまり厳密なことをいうと処理が煩雑になり過ぎるので「手
を抜く」というのも一つの方法ですね。
 入力処理において手を抜く一つの方法は、入力をエコーすることです。整
数xをscanfなどで入力したならば、それをそのままprintfなどで表示します。
つまり、ユーザに対して「あなたの入力はこの様に解釈された」ということ
を示す訳です。そうすればユーザは自分の意図した通りに処理が進んでいる
のか、そうではないのかを知ることが出来ます。
 最良の方法は、手を抜かずにミスコミュニケーションをなくすことですが、
次善の策として、ミスコミュニケーションが発生した場合にはそれをユーザ
に通知するという方法がある、ということです。ログを吐き出すのと同じ様
なものですね。

--
椎野 裕樹 <yu...@cds.ne.jp>


Yuki Shiino

unread,
Jul 1, 2000, 3:00:00 AM7/1/00
to
 椎野です。

鴻池さんの記事<8jic0j$lis$1...@kmsnews.kms.ac.jp>から


> 椎野さんは,buf に n 以上の読み込みがあった場合に p!=NULL とはならないから
> while は実行されないのではといっているような気がしますが。あと,while
> (c=getchar(), c!='\n' && c!=EOF)) では,無限ル-プになるように思いますが,気
> のせいでしょうか。まあ,めったなことでは,ここには来ないとは思いますが。(間
> 違っていたらすいません。)

 いいえ、違います。これについては別記事に書きましたのでそちらを
ご覧下さい。実装ではなく、関数の仕様を問題にしています。

 fgets(buf, n, fp)は高々n-1文字を読み込み、'\0'を書き加えるので
合わせて最大nバイトのデータをバッファに書き込みます。この時、改
行文字が含まれていれば、p!=NULLと成り得ます。whileも無限ループに
はならないでしょう。しかし、その他の部分は実装に色々問題がありま
す。そもそもコンパイル出来ない(ことが見ただけで分かる)。

 ちょっと書き換えてみたのが次のコードです。コンパイル・テストし
てませんので問題があっても責任は持てません。

int my_fgets_2nd(char* buf, int n, FILE* fp)
{
char* s = fgets(buf, n, fp);
if (s == NULL) return EOF; /* EOF indicates error. */

char* p = strchr(s, '\n');
if (p) { /* replace a newline character with a null character. */
*p = '\0';
return 0; /* return successfully. */
}
else { /* skip a line. */
for (int c; c=fgetc(fp), c!=EOF && c!='\n';) ;
return 1; /* 1 indicates that my_fgets_2nd flush a line. */
}
}


> >>"KATAYAMA Yoshio" <ka...@pfu.co.jp> wrote in message
> news:KATE.00Ju...@sims211.trad.pfu.co.jp...
> >> If end-of-file in encountered and no characters have been read
> >> into the array, the contents of the array remain unchanged and
> >> null pointer is returned.
>
> ところで,EOFに出くわしかつ一文字も読んでない状態ってどんな時なんだろう?。

 ファイルの終端(EOF)でfgetsした時。
 fgetsはEOFに達しても1文字以上データを読み込んでいたら成功しま
す。次にfgetsを呼び出すとEOFに達しており1文字も読み込めないので
この時初めてNULLを返します。
while (fgets(buf, n, fp) != NULL) ....
などとすると、EOFに達し且つ1文字も読み込んでいない状態になりま
す。


> ん,でもこれはこの時 null pointer を返すってことで,エラー時のことではない
> か。でもエラー時にはnull pointer を返すからこれがエラー時ってことかな。よく
> 分からなくなってきた。

 どちらもNULLを返しますが、EOFとエラーは異なります。fgetsの返り
値からは区別が付かないので、必要であればfeof, ferrorを使って調べ
ます。
 簡単に言うと、処理自体は正常に行われたのだがファイルの終端に達
しこれ以上データが読めない状態がEOF、読み込み処理に問題がありデー
タが読めなかった状態がエラーです。エラーの原因は、fopenしていな
いのに読もうとした、fopenのモード指定で読み込みモードになってい
ない、既にfcloseされている、ファイルの読み込み権限が与えられてい
ない、フロッピーディスクが抜かれてファイルにアクセスできなくなっ
た、テープが絡まった、ネットワーク上のファイルを読んでいてコネク
ションが切れた……などなどです。
 EOFは正常、エラーは異常と考えてまず問題ないでしょう。

--
椎野 裕樹 <yu...@cds.ne.jp>


Hironobu Suzuki

unread,
Jul 3, 2000, 3:00:00 AM7/3/00
to

>>>>> "Sh" == Shiro SADO <sa...@smlab.tutkie.tut.ac.jp> writes:
In article <8j3s2k$5ga$1...@news.tut.ac.jp> sa...@smlab.tutkie.tut.ac.jp (Shiro SADO) writes:
Sh> scanf()が「予期しない入力に対して脆弱」という認識は、良く見受けら
Sh> れる誤った認識だとおもうのですが、


「標準入力からはどのような入力があるか予想できず、予期しない入力に対し
て脆弱なscanf()は使わないのが望ましい。fgets()など読み取りの最大文字数
が指定できる関数で安全に読み取ってから、処理を加えるのがよい。(C言語
入門、大角盛広、西東社)」

というのは”YES”です。

scanf()は、予期しない入力に対して脆弱であるという認識は決して誤った認
識ではありません。

ひろのぶ

Toru Takinaka

unread,
Jul 3, 2000, 3:00:00 AM7/3/00
to
In article <HIRONOBU.0...@h2np.h2np.suginami.removeme.tokyo.jp>, hiro...@h2np.suginami.removeme.tokyo.jp says...

>「標準入力からはどのような入力があるか予想できず、予期しない入力に対し
>て脆弱なscanf()は使わないのが望ましい。fgets()など読み取りの最大文字数
>が指定できる関数で安全に読み取ってから、処理を加えるのがよい。(C言語
>入門、大角盛広、西東社)」
>というのは”YES”です。
>scanf()は、予期しない入力に対して脆弱であるという認識は決して誤った認
>識ではありません。
fgetsも予期しない(長い行の)入力に対して、落ちはしないけど、
通常は予期しないような振る舞い(切れた分が捨てられずに、
次の入力になる)をするので、予期しない入力が本当に心配なら、
getc,getchar,fgetcあるいはreadを使った方がいいかも・・
--
滝中 徹 <taki...@cs.mpd.nec.co.jp>


Yuki Shiino

unread,
Jul 4, 2000, 3:00:00 AM7/4/00
to
 椎野です。改行位置に変更あり。

滝中さんの記事<3960f0f6$1...@newssv.cs.mpd.nec.co.jp>から

 scanfがどうだとか、fgetsがどうだとか云う問題ではないでしょう。

 プログラマが予期しない事態が生じれば、どんな関数を使っているの
であれ危険でしょう。コンピュータが命令されたことしか出来ない以上、
プログラマが予期しない事態に、適切に(都合よく)対処してくれる訳
がありません。偶然上手く行くこと以外に何が期待出来るでしょう。

 入力処理ではプログラマが予期しない(出来ない)事態が生じ易い為
に、入力処理は危険であり、難しいと言われるのです。scanfは入力関数
の代表選手である為使用頻度が高いことと、初心者にとってはその使い
勝手の悪さから、良くない噂が流れているに過ぎません。又、入力処理
に限らず、予期しない事態が危険なことは一般に言えることです。
 例えば、xが0になることを予期できなければ、1/xというコードは危険
でしょう。

 scanfに関して幾つかの問題があることは認めます。しかし、それは
scanf固有の問題でしょうか。scanf固有の問題ではないのであれば、代
替手段を用いたからと言って解決するとは限りません。特に入力処理に
関する問題は、如何なる手段を用いたところで入力処理を行う限り、避
けて通ることは出来ません。
 scanfは入力処理の代表選手であるが為に、scanf固有の問題ではなく
入力処理全般に言える問題まで、scanfの欠陥であるかの様に言われます。

 scanfの欠点を挙げる人は多いですが、私の知る限りにおいては、本当
にscanfそのものが持つ欠陥を指摘する人はほとんど皆無です。
 多くの人はそれがscanf固有の問題ではないことが理解出来ずにscanf
を批判しています。それが本当にscanf固有の問題なのかどうか考え直し
てみて頂きたいものです。

(scanf固有の問題ではないことが理解出来ない人々は、scanfの代わり
にXを使えば良い、といったことを言いますが、当然的外れな指摘です。
Xを使って安心している人は注意しましょう。ではscanf固有の問題とそ
うではない問題を区別出来る人かどうかを見分けるにはどうすれば良い
かと云うと……。)

--
椎野 裕樹 <yu...@cds.ne.jp>


Kusakabe Youichi

unread,
Jul 4, 2000, 3:00:00 AM7/4/00
to
In article <8jqge1$qah$1...@news.cds.ne.jp>, Yuki Shiino <yu...@cds.ne.jp> wrote:
> scanfに関して幾つかの問題があることは認めます。しかし、それは
> scanf固有の問題でしょうか。

はい。

# それに「いくつかの」じゃあ、曖昧すぎるぞ。

Shiro SADO

unread,
Jul 4, 2000, 3:00:00 AM7/4/00
to

佐渡です。

X3010に関する情報ありがとうございました。
>iwaoさん、iijimaさん

それで、「scanfの10の基本技」とか、そういうのをメモして
おきたいと思いつつあんまり進んでいないです。>椎野さん

スレッド「Re: scanf のかわりは?」での
BXQ0...@nifty.ne.jp氏の発言 <20000705024...@nifty.ne.jp> より引用
>> 少なくとも俺は、そういう意味なのだろうなと
>> 思いました(のでjokes行きは希望しません)。

# ゴミ捨て場じゃないんで、一応。> fj.jokes

>> 「scanf固有の問題だ」ということなんでないんですか?

これは自分も中村さんと同じに読みました。

>> そういう記事見た記憶無いなぁ。記憶違いだったら御免だけど。

これは中村さんの記憶違い(失礼)でしょう。
# 調べるの大変なんで記事ID付けません(ごめんなさい)。

1.「変換失敗時のtoken非消費 → dead lock」の問題
2.buffer overrunの問題
3.bufferringの問題

1,2が問題になることはあるが、容易に解決可能。
scanfできちんと書かれたプログラムは、なにも考えずに
fgets+sscanfを使用したなどのプログラムに比べて、安全
性が高い等、椎野さんは書かれております。

3は、scanfと比べて明らかに良い方法がとりわけあるわけ
でない、というふうなことを書かれていたように記憶して
おります。

---
佐渡詩郎 (さど しろう) / e-mail : sa...@smlab.tutkie.tut.ac.jp

Shiro SADO

unread,
Jul 4, 2000, 3:00:00 AM7/4/00
to

佐渡です。

スレッド「Re: scanf のかわりは?」での

yu...@cds.ne.jp氏の発言 <8jqge1$qah$1...@news.cds.ne.jp> より引用


>>  scanfの欠点を挙げる人は多いですが、私の知る限りにおいては、本当
>> にscanfそのものが持つ欠陥を指摘する人はほとんど皆無です。
>>  多くの人はそれがscanf固有の問題ではないことが理解出来ずにscanf
>> を批判しています。それが本当にscanf固有の問題なのかどうか考え直し
>> てみて頂きたいものです。

ただ、変換の書式指定によって、token切りだしの基準が
変化するのがあんまり使いやすくない&奇麗でない感じが
します。
# %dで「3.1415」を読もうとすると、「.1415」が残る
# 仕様。

あと、overflowに関するerrorcheckのinterfaceがない点。

もっとも、最大の問題点は、返り値をチェックしない使い
方が、なぜか意外に多く見受けられることだと思うんですが。
仕様通りに使えば問題ないものを、なぜか問題のある使い
方をしていて、しかもそれをscanfの問題だ、とか言って
しまう人がいるのが結構変。

IIJIMA 'Delmonta' Hiromitsu

unread,
Jul 4, 2000, 3:00:00 AM7/4/00
to
いいじま@東大文学部です。

>  c=getchar() を c=gets(fp) に直すんですか。この部分は何か勘違いされ
> ているか、書き間違いではないでしょうか。

またやっちまった(^^;) 書き間違いです。
gets(fp) じゃなくって getc(fp) ですね。

>  私が言いたいことは、my_fgetsの呼び出し側では、my_fgetsが一行全体を
> バッファに読み込んだのか、それとも一行の初めのn文字を読み込んだのか
> が分からない、ということです。

(略)
>  飯嶋さんのmy_fgetsは仕様に少々問題があるのではないでしょうか。
> 或いは用途が特化し過ぎていないでしょうか。

おっしゃるとおりです。特化しすぎといわれればその通りです。
手入力の場合ならだいたいこれでいいつもりですが、厳密にやりたい
場合や、ファイルからの入力の場合はきちんと考えないといけません
からね。

大体こういうときに使う方法として思い当たるのは
○「行は 1kB までというのが仕様である」と強弁する
○getc() でちまちまと読んで、トークン単位で解析する
○Windows API でよくやるような「足りなければ realloc()」
○32kB 位の適当な単位で読んで、長い場合は線形リストで
 保持、端数は realloc() で shrink する
○Perl に逃げる(^^;)
といった程度でしょうか。

>  最良の方法は、手を抜かずにミスコミュニケーションをなくすことですが、
> 次善の策として、ミスコミュニケーションが発生した場合にはそれをユーザ
> に通知するという方法がある、ということです。ログを吐き出すのと同じ様
> なものですね。

全く同感です。

Yuki Shiino

unread,
Jul 5, 2000, 3:00:00 AM7/5/00
to
 椎野です。

日下部さんの記事<void-04070...@nhdr1-757.nirai.ne.jp>から


> In article <8jqge1$qah$1...@news.cds.ne.jp>, Yuki Shiino <yu...@cds.ne.jp> wrote:
> > scanfに関して幾つかの問題があることは認めます。しかし、それは
> > scanf固有の問題でしょうか。
>
> はい。
>
> # それに「いくつかの」じゃあ、曖昧すぎるぞ。

 冗談であればfj.jokesにでも投稿して下さい。

 そうでないとしたら記事の意味が全く分かりません。何が「はい。」
なのでしょうか。私の記事からの引用部分は「あなたはscanf固有の問
題と、入力処理一般に対して言える問題を、混同してはいませんか。」
という意味です。
 日下部さんは「はい。私は混同してます。」と仰しゃりたいのでしょ
うか。それとも逆なんでしょうか。
 何れにせよ、日下部さんは御自身が問題を混同しているかいないかを
fj.comp.lang.cでアピールしているだけと解釈して良いのでしょうか。
何か他に仰しゃりたいことがあったのでしたら、残念ながら読み取れま
せんでしたので解説をお願いしたいです。

(日下部さんはscanfに関する問題は全てscanf固有の問題である、と仰
しゃっているのかとも思ったのですが、そうではありませんよね。scanf
が入力処理に使われる関数である以上、scanfにまつわる問題の中には当
然、入力処理に関する問題も含まれますから。)

--
椎野 裕樹 <yu...@cds.ne.jp>


Kusakabe Youichi

unread,
Jul 5, 2000, 3:00:00 AM7/5/00
to
In article <8jt165$gu6$1...@news.cds.ne.jp>, Yuki Shiino <yu...@cds.ne.jp> wrote:

> 何か他に仰しゃりたいことがあったのでしたら、残念ながら読み取れま
> せんでしたので解説をお願いしたいです。

少しは文章を読む練習をしたらどうでしょう?

Nakamura Akifumi

unread,
Jul 5, 2000, 3:00:00 AM7/5/00
to
中村っす。

fj.comp.lang.c の <8jt165$gu6$1...@news.cds.ne.jp> の
記事において 2000年07月05日(水) 00時51分19秒頃、
Yuki Shiino <yu...@cds.ne.jp>さんは書きました。

>> > scanfに関して幾つかの問題があることは認めます。しかし、それは
>> > scanf固有の問題でしょうか。
>>
>> はい。
>>
>> # それに「いくつかの」じゃあ、曖昧すぎるぞ。
>
> 冗談であればfj.jokesにでも投稿して下さい。
>
> そうでないとしたら記事の意味が全く分かりません。何が「はい。」
>なのでしょうか。私の記事からの引用部分は「あなたはscanf固有の問
>題と、入力処理一般に対して言える問題を、混同してはいませんか。」
>という意味です。

抽象的:
何故、日下部さんではなくて椎野さんのほうが
混同(などの間違い)をしている、という可能性を
考慮に入れないのでしょう?

#m?

具体的:
少なくとも俺は、そういう意味なのだろうなと
思いました(のでjokes行きは希望しません)。
「scanf固有の問題だ」ということなんでないんですか?
少なくとも椎野さんの2つ前の記事を読んだ「だけ」では
なぜscanf固有の問題ではないとイイキレルのか?という
問いへの答えは、ナニ一つ示されてないような気がしました。
また、それ以外の記事からそのイイキリを導いたりできましたっけ?
そういう記事見た記憶無いなぁ。記憶違いだったら御免だけど。


#と、俺は(笑)理解しました。こんな感じで良かったのかなあ。


Hironobu Suzuki

unread,
Jul 5, 2000, 3:00:00 AM7/5/00
to

>>>>> "To" == Toru Takinaka <taki...@cs.mpd.nec.co.jp> writes:
In article <3960f0f6$1...@newssv.cs.mpd.nec.co.jp> taki...@cs.mpd.nec.co.jp (Toru Takinaka) writes:
To> fgetsも予期しない(長い行の)入力に対して、落ちはしないけど、通常は
To> 予期しないような振る舞い(切れた分が捨てられずに、次の入力になる)
To> をするので、予期しない入力が本当に心配なら、getc,getchar,fgetcあ
To> るいはreadを使った方がいいかも・・

そうだけど、それはそれでちょっと問題を混同しています。

あなたの答えにはlexical analysis問題とillegal data問題の2つが混在して
います。

おっしゃる通りillegal dataを排除する入力関数としてはfgetsは効果的です
がlexical analysisは解決しません。

ただしlexical analysisを解決するのはlexを使うというのが解です。lexが吐
き出すコードには一般にはgetcが使われています。

ひろのぶ

Yuki Shiino

unread,
Jul 7, 2000, 3:00:00 AM7/7/00
to
 椎野です。

佐渡さんの記事<8jtep5$jac$1...@news.tut.ac.jp>から
> # ゴミ捨て場じゃないんで、一応。> fj.jokes

 ごめんなさい。失礼な言い方をしてしまいました。


> >> 「scanf固有の問題だ」ということなんでないんですか?
>
> これは自分も中村さんと同じに読みました。

 日下部さんが「scanf固有の問題だ」という意味で「はい。」と書
いたことは想像しました。しかし、「何が」scanf固有の問題なんで
しょうか。少なくとも日下部さんは、私の知る限り「何が」につい
て何も言っていません。
 残念ながら「はい。」の一言でscanfの何を固有の問題だと考え
ているのかは読み取れません。今まで話題になったこと全てがscanf
固有の問題だとお考えなら、私は反対します。
(と、先の記事でも書いたつもりだったんですが。「scanf固有の問
題だ」までなら私にも読み取れました。しかし「何が」問題なんで
しょう。)

 中村さんの記事に対しても同じです。一体どの問題に対してscanf
固有の問題ではないと言い切れていないとお考えなのでしょう。
 又、私はその問題に対してscanf固有の問題ではないと発言してい
るでしょうか。


> 1.「変換失敗時のtoken非消費 → dead lock」の問題
> 2.buffer overrunの問題
> 3.bufferringの問題
>
> 1,2が問題になることはあるが、容易に解決可能。
> scanfできちんと書かれたプログラムは、なにも考えずに
> fgets+sscanfを使用したなどのプログラムに比べて、安全
> 性が高い等、椎野さんは書かれております。
>
> 3は、scanfと比べて明らかに良い方法がとりわけあるわけ
> でない、というふうなことを書かれていたように記憶して
> おります。

 更に付け加えさせて頂くと……。

 1.について。もしscanfが変換失敗時にtokenを消費するならば、
それは解決不可能な問題になり得ます。実際にはscanfは変換失敗時
にtokenを消費しないので、この問題は解決可能です。
 tokenの非消費が邪魔に感じられることはあるでしょうが、汎用性
を考えれば、当然の仕様でしょう。

 2.について。バッファサイズを指定しないとoverrunするのは当然
ですし、これは「scanf固有」の問題でしょうか。

 3.について。これもscanf固有の問題だとは到底思えません。佐渡
さんも書いてくれていますが、寧ろ他の関数よりも優れている点さ
えあります。


 結局、何がscanf固有の問題なのでしょう。scanf固有のものでは
なく入力処理全般に対して言える問題ならば、scanfを使おうが使う
まいが関係ないですよね。
 「はい。」の一言で全てを悟れというならば、私には無理です。

--
椎野 裕樹 <yu...@cds.ne.jp>


KATAYAMA Yoshio

unread,
Jul 7, 2000, 3:00:00 AM7/7/00
to
In article <8k2bmj$1fh$1...@news.cds.ne.jp>,
Yuki Shiino <yu...@cds.ne.jp> writes:

>> あと、overflowに関するerrorcheckのinterfaceがない点。

> これはerrnoに反映される筈です。strtoXと同じ扱いの筈です。

%d などは、入力のフォーマットが strtoX と同じと言っているだけで、
strtoX を使って変換するとは規定されていません。例えば、

d Maches an optionally signed decimal integer, whose format
is the same as expected for the subject sequence of the
strtol function with the value for the base argument. The
corresponding argument shall be a pointer to integer.

となっています。オーバーフローに関しては、

If this object does not have an appropriate type, or if the
result of the conversion cannot represented in the space
provided, the result is undefined.

が適用されると思います。
--
片山@PFU

Nakamura Akifumi

unread,
Jul 7, 2000, 3:00:00 AM7/7/00
to
中村っす。これこそゴミだけど一応書きたいんで。

fj.comp.lang.c の <8jtep5$jac$1...@news.tut.ac.jp> の
記事において 2000年07月04日(火) 19時43分33秒頃、
Shiro SADOさんは書きました。

>>> 少なくとも俺は、そういう意味なのだろうなと
>>> 思いました(のでjokes行きは希望しません)。
># ゴミ捨て場じゃないんで、一応。> fj.jokes

#あ。俺は、jokesがナニであろうと(ゴミ捨て場であろうとなかろうと)
#今回「(つまり、どこにも)行く必要」は無いと思った、ということです。

>>> そういう記事見た記憶無いなぁ。記憶違いだったら御免だけど。
>これは中村さんの記憶違い(失礼)でしょう。

あ。記憶違いなのならば文字通り記憶違いなんだから
失礼もなにもありゃしません。どうもです。お気になさらず。
「失った」ものがもし有ったとしても、
それは「礼」ではないでしょう。(例だったりして(笑))


#で、究極のゴミ:
#いちいちこういう事を書かないとならんのが世の中だとしたら
#ちょっとそれこそ無駄だよね…
#これじゃ全部省きたくなる人の気持ちもわかる(ような気がしてるつもり(笑))。


Nakamura Akifumi

unread,
Jul 7, 2000, 3:00:00 AM7/7/00
to
中村っす。

fj.comp.lang.c の <8k2arj$oo$1...@news.cds.ne.jp> の
記事において 2000年07月07日(金) 01時06分55秒頃、
Yuki Shiino <yu...@cds.ne.jp>さんは書きました。

> 日下部さんが「scanf固有の問題だ」という意味で「はい。」と書
>いたことは想像しました。しかし、「何が」scanf固有の問題なんで
>しょうか。少なくとも日下部さんは、私の知る限り「何が」につい
>て何も言っていません。

その「何が」を、再び(?)説明する必要は
もはや無い、と考えたのかも。

椎野さんの <8jt165$gu6$1...@news.cds.ne.jp> もまさに
説明不要と解釈した上での行動(発言)であるように思えるです…
「なにを今更?」調子。

> 中村さんの記事に対しても同じです。一体どの問題に対してscanf
>固有の問題ではないと言い切れていないとお考えなのでしょう。
> 又、私はその問題に対してscanf固有の問題ではないと発言してい
>るでしょうか。

更に過去の記事の理解欠如が俺にあったらしいのは失礼。

ただ、 <8jt165$gu6$1...@news.cds.ne.jp> 自体には
まさに(上で説明したように)なーんにもミのあることは
書かれていませんから、椎野さんがvoidさんに対して
持った疑問と正に同じものを、俺は椎野さんに対して
持ったまで、だと自分では解釈しています。

#どうせ、5年10年遡ったらナンかカンか出てくるでしょうしね(^^;

ま、論点が既に「hogehogeを理解してますか?」じゃなくて
「(目的語は特にないが、あえて言えば日本語を)理解していますか?」に
移った後だったわけで(笑)。
<8jt165$gu6$1...@news.cds.ne.jp>
>日下部さんは「はい。私は混同してます。」と仰しゃりたいのでしょ
>うか。それとも逆なんでしょうか。
これじゃぁねぇ。


#日本語を十全に使おうぜ…
#よく「話題をそらすな」って怒る人いるけど、
#まず日本語(下位プロトコル)が腐っていたら
#上位もうまく会話できねーってば…

Yuki Shiino

unread,
Jul 8, 2000, 3:00:00 AM7/8/00
to
 椎野です。

片山さんの記事<KATE.00J...@sims211.trad.pfu.co.jp>から

 そうだったんですか。だとするとatoiなどと全く同じ理由に依り
scanfはほとんど使い物にならないことになりますね。
 これは非難されるべき仕様上の欠陥ですね。(undefinedなのが
せめてもの救いですが。)

--
椎野 裕樹 <yu...@cds.ne.jp>


Yuki Shiino

unread,
Jul 8, 2000, 3:00:00 AM7/8/00
to
 椎野です。

中村さんの記事<20000707151...@nifty.ne.jp>から


> > 日下部さんが「scanf固有の問題だ」という意味で「はい。」と書
> >いたことは想像しました。しかし、「何が」scanf固有の問題なんで
> >しょうか。少なくとも日下部さんは、私の知る限り「何が」につい
> >て何も言っていません。
>
> その「何が」を、再び(?)説明する必要は
> もはや無い、と考えたのかも。

 「考えたのかも」ではなく、考えたのでしょう。
 しかし私にはそれでは不十分だと言う話です。


> 椎野さんの <8jt165$gu6$1...@news.cds.ne.jp> もまさに
> 説明不要と解釈した上での行動(発言)であるように思えるです…
> 「なにを今更?」調子。

 それは中村さんの勘違いです。私は「はい。」の一言では日下部さんの
意図を理解出来なかったので質問しただけです。「なにを今更?」どころ
か「何を言わんとしているのか理解出来ません。」です。


> <8jt165$gu6$1...@news.cds.ne.jp>
> >日下部さんは「はい。私は混同してます。」と仰しゃりたいのでしょ
> >うか。それとも逆なんでしょうか。
> これじゃぁねぇ。

> #日本語を十全に使おうぜ…
> #よく「話題をそらすな」って怒る人いるけど、
> #まず日本語(下位プロトコル)が腐っていたら
> #上位もうまく会話できねーってば…

 私の記事からの引用部分、これ皮肉だってこと理解してらっしゃいます
か。中村さんの言動を聞いていると文字通りに受け取っているのではない
かと不安になって来ます。
 それともこんな下手くそな皮肉を書いている暇があるなら、日本語の勉
強をしろ、ということでしょうか。

--
椎野 裕樹 <yu...@cds.ne.jp>


Yuki Shiino

unread,
Jul 8, 2000, 3:00:00 AM7/8/00
to
 椎野です。追記です。

私の記事<8k53re$p15$1...@news.cds.ne.jp>から
> 片山さんの記事<KATE.00J...@sims211.trad.pfu.co.jp>から


> > となっています。オーバーフローに関しては、
> >
> > If this object does not have an appropriate type, or if the
> > result of the conversion cannot represented in the space
> > provided, the result is undefined.
> >
> > が適用されると思います。

 "if the result of the conversion cannot represented in that type,"
ではなく、"in the space provided,"であるのは何か意味があったりしませ
んでしょうか。
 これはバッファオーバーランに対する規定であって、オーバーフローなど
に対する規定ではないという可能性はないのでしょうか。具体的には"%s"や
"%[...]"を使った場合に"the space provided"を超える入力変換があった場
合に対する規定である可能性はないでしょうか。

 片山さんのことなのでまず間違いはないと思うのですが、念の為に確認さ
せて下さい。


>  これは非難されるべき仕様上の欠陥ですね。(undefinedなのが
> せめてもの救いですが。)

 これは"implementation-defined"と(何故か)勘違いしてました。おそら
くscanfに対する一縷の望みがそうさせたのでしょう。

--
 椎野 裕樹 <yu...@cds.ne.jp>


Yoshiki Kataoka

unread,
Jul 8, 2000, 3:00:00 AM7/8/00
to
片岡です。


> ボードが動かないと、すぐパスコンを足す

パスコンやフェライトビーズって、トラブって *から* 足すものでしたっけ?

# 草の根的な努力と実害が出たときの対処法が短絡するあたり、
# いつぞやのスレッドと共通するものを感じる...

KATAYAMA Yoshio

unread,
Jul 9, 2000, 3:00:00 AM7/9/00
to
In article <8k57vv$rfb$1...@news.cds.ne.jp>,
Yuki Shiino <yu...@cds.ne.jp> writes:

>> > If this object does not have an appropriate type, or if the
>> > result of the conversion cannot represented in the space
>> > provided, the result is undefined.

> "if the result of the conversion cannot represented in that type,"


>ではなく、"in the space provided,"であるのは何か意味があったりしませ
>んでしょうか。

規格において“type”という語は int や signed short int のような
個々の型を指す場合と integral type のように包括的な型を指す場合
があります。この曖昧さを避けるためか、データ型のサイズが問題にな
るような場合は“size”或は“space”という語を用いているようです。
例えば、6.3.4 Cast operators でも、

A pointer may be converted to an integral type. The size of
integer required and the result are implementation-defined.
If the space provided is not long enough, the behavior is
undefined.

のように integral type に対して size、space を使っています。

>>  これは非難されるべき仕様上の欠陥ですね。(undefinedなのが
>> せめてもの救いですが。)

> これは"implementation-defined"と(何故か)勘違いしてました。おそら
>くscanfに対する一縷の望みがそうさせたのでしょう。

undefined だから、POSIX 等の他の規格で規定することができるという
話はあります。:-)

C の規格単体で考えるなら不充分な規定だと思います。全くの私見で
すが、traditional C との絡み(互換性等)でこうなったのではないか
と思います。しかし、ANSI C の Rational(X3J11/88-151)にはこの件
について何も書かれていないので、何も考えていないだけかも知れませ
ん。
--
片山@PFU

Nakamura Akifumi

unread,
Jul 9, 2000, 3:00:00 AM7/9/00
to
中村っす。

fj.comp.lang.c の <8k56j7$qg3$1...@news.cds.ne.jp> の
記事において 2000年07月08日(土) 03時12分29秒頃、
Yuki Shiino <yu...@cds.ne.jp>さんは書きました。

>> 椎野さんの <8jt165$gu6$1...@news.cds.ne.jp> もまさに
>> 説明不要と解釈した上での行動(発言)であるように思えるです…
>> 「なにを今更?」調子。
>
> それは中村さんの勘違いです。私は「はい。」の一言では日下部さんの
>意図を理解出来なかったので質問しただけです。「なにを今更?」どころ
>か「何を言わんとしているのか理解出来ません。」です。

じゃ、控えめにいっても「お互い様」ってとこだったのでは。

それはそれとして「意図」ねえ。
「はい」の一言で、「事実」は既に伝わっているじゃん。
それで、なぜ不足なんだろう? なぜ相手の「意図」を
鯖読む、ないしは勘ぐる、"必要"があるんだろう?
#っていうか、お知りになりたかった事柄は「意図」ではないのでは?
#「事実についての情報(の追加)」が欲しかったのでは?
##つまり、日本語つーかことば…(下記参照)

> 私の記事からの引用部分、これ皮肉だってこと理解してらっしゃいます
>か。中村さんの言動を聞いていると文字通りに受け取っているのではない
>かと不安になって来ます。

皮肉になってたらまだイイんだけどな、と理解(ってのか)していました。

> それともこんな下手くそな皮肉を書いている暇があるなら、日本語の勉
>強をしろ、ということでしょうか。

ヒマの問題かどうかは知りませんが、それっぽいことは考えたような記憶が。
日本語つーより「ことば」ですけどね。

皮肉を「(皮肉を言うよりも先に言うべき言葉よりも)先に」言ったんでは
しょーがないような。
ん、これじゃ恒等式ですね。困ったな。俺も(笑)旨い日本語が思いつかない。


saitoh akinori

unread,
Jul 10, 2000, 3:00:00 AM7/10/00
to
大阪大学の齊藤です

Yoshiki Kataoka wrote:
> > ボードが動かないと、すぐパスコンを足す

> パスコンやフェライトビーズって、トラブって *から* 足すものでしたっけ?

そうです。
クロックが1MHzとか、2MHzのころの(まっとうでない)マイコン的発想では、
波形にひげが出たら、コンデンサでごまかすとかいった,ひどいもんでした。
フェライトビーズは当時まだ無かったし必要性も無かった。
すべてのICに1個づつパスコンがつくのはもっと後の時代です。

当時の解説書に、『グリッジを並列コンデンサで押さえてはいけない』と書いて
あった
記憶があるのですが,、、。つまり、そう言うことをしていた悪い子がいたって
ことですね。

S100とかTRS80とか、あの当時の8ビットマイコンの回路図をみたら、担当者の
首をしめたくなりますよね。マイコン少年の自作PCならともかく、売り物のPCで
あんな設計してはいけない。。

齊藤明紀 sai...@ics.es.osaka-u.ac.jp

Yuki Shiino

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
 椎野です。

中村さんの記事<20000709212...@nifty.ne.jp>から
> じゃ、控えめにいっても「お互い様」ってとこだったのでは。

 いいえ、違うでしょう。
 記事の内容を理解出来ず質問したのが私です。日下部さんは(おそら
くは)私の記事の内容を理解された上で記事を書かれているのですから、
「お互い様」ではないと思います。


> それはそれとして「意図」ねえ。
> 「はい」の一言で、「事実」は既に伝わっているじゃん。
> それで、なぜ不足なんだろう? なぜ相手の「意図」を
> 鯖読む、ないしは勘ぐる、"必要"があるんだろう?
> #っていうか、お知りになりたかった事柄は「意図」ではないのでは?
> #「事実についての情報(の追加)」が欲しかったのでは?

 「はい。」の一言でどんな事実が伝わったんでしょう。
 発言者たる日下部さんが私に何を言おうとしていたのか分からないの
で、不足と言っています。何を言わんとしていたのかが分からないので
すから、記事を読まなかったのも同然です。これで十分なのでしょうか。

 私としては特に、日下部さんがscanfに関する特定の問題について言及
されている可能性に興味があります。scanf固有の問題は、私もそう数多
く知っている訳ではありませんし、後学の為に是非とも詳しいお話をお
伺いしたいです。

 中村さんが十分理解出来たと仰しゃるなら、代わりに解説してくれま
せんか。(人に言葉遣いを指南して下さるぐらいの方ですから、期待し
ています。)
 それとも日下部さんの意図(意見)など無視しろと仰しゃるのでしょ
うか。


> 皮肉を「(皮肉を言うよりも先に言うべき言葉よりも)先に」言ったんでは
> しょーがないような。
> ん、これじゃ恒等式ですね。困ったな。俺も(笑)旨い日本語が思いつかない。

 「皮肉を言うよりも先に言うべき言葉」とは何でしょうか。

 私は問題の記事の中で、先ず自分の意見を明らかにし、次に相手の意
見が理解出来なかったことを(少々皮肉な表現で)告白し、それゆえに
詳しい解説を請い、最後に自分がどの程度相手の意見を理解したかを説
明しました。
 何か問題があるなら遠慮なく仰しゃって下さい。

--
 表現が皮肉過ぎたという点は反省しています。
 皆さん(特に日下部さん)、ごめんなさい。
椎野 裕樹 <yu...@cds.ne.jp>


Yuki Shiino

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
 椎野です。

片山さんの記事<KATE.00J...@sims211.trad.pfu.co.jp>から


> 規格において“type”という語は int や signed short int のような
> 個々の型を指す場合と integral type のように包括的な型を指す場合
> があります。この曖昧さを避けるためか、データ型のサイズが問題にな
> るような場合は“size”或は“space”という語を用いているようです。
> 例えば、6.3.4 Cast operators でも、
>
> A pointer may be converted to an integral type. The size of
> integer required and the result are implementation-defined.
> If the space provided is not long enough, the behavior is
> undefined.
>
> のように integral type に対して size、space を使っています。

 なるほど。わざわざありがとうございました。


> undefined だから、POSIX 等の他の規格で規定することができるという
> 話はあります。:-)

 でもPOSIXのscanfも同じく未定義動作ですよね。(間違ってたらご指摘
下さい。)


> C の規格単体で考えるなら不充分な規定だと思います。全くの私見で
> すが、traditional C との絡み(互換性等)でこうなったのではないか
> と思います。しかし、ANSI C の Rational(X3J11/88-151)にはこの件
> について何も書かれていないので、何も考えていないだけかも知れませ
> ん。

 でも Rationale には(C89, C99共に)こう書いてありませんか。

4.9.6.2 The fscanf function (C89)
7.19.6.2 The fscanf function (C9X, WG14/N897 J11/99-032)

The conversions performed by fscanf are compatible with
those performed by strtod and strtol.

"perform"という語は副作用も含めた強い言葉だと思うんですが。"compat-
ible"という語が弱いのかな。"equivalent to"なら良かったのでしょうか。
 オーバーフローを検出してくれないのではscanf familyは全く使い物に
ならないと言われても反論できない。(fscanfがバッファリングに使える
ぐらいか。)

--
椎野 裕樹 <yu...@cds.ne.jp>


KATAYAMA Yoshio

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
In article <8kcs85$rmu$1...@news.cds.ne.jp>,
Yuki Shiino <yu...@cds.ne.jp> writes:

>> undefined だから、POSIX 等の他の規格で規定することができるという
>> 話はあります。:-)

> でもPOSIXのscanfも同じく未定義動作ですよね。(間違ってたらご指摘
>下さい。)

POSIX が手元にないのでパスです。(_ _)

>> と思います。しかし、ANSI C の Rational(X3J11/88-151)にはこの件
>> について何も書かれていないので、何も考えていないだけかも知れませ
>> ん。

> でも Rationale には(C89, C99共に)こう書いてありませんか。

> The conversions performed by fscanf are compatible with


> those performed by strtod and strtol.

「何も書いていない」は「オーバーフローについては何も書いていない」
のつもりでした。誤解を招く表現で済みませんでした。「Rational だ
から、オーバーフローについても動作を合わせるなら、その旨がはっき
りと書かれているはず」という思い込みがあるので、、、

>"perform"という語は副作用も含めた強い言葉だと思うんですが。"compat-
>ible"という語が弱いのかな。"equivalent to"なら良かったのでしょうか。

“conversion”に含まれる動作がどこまでかが問題のような気もします。
strtoXX でオーバーフローが起きた場合、(概念的には)

文字列 ─A→ 真の値 ─B→ エラー値

という2段階が行なわれます。conversion が A のみを指すのか、B を
含むのかというわけです。
--
片山@PFU

Nakamura Akifumi

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
中村っす。

fj.comp.lang.c の <8kcpr4$q7s$1...@news.cds.ne.jp> の
記事において 2000年07月11日(火) 00時24分16秒頃、
Yuki Shiino <yu...@cds.ne.jp>さんは書きました。

>> じゃ、控えめにいっても「お互い様」ってとこだったのでは。
>
> いいえ、違うでしょう。
> 記事の内容を理解出来ず質問したのが私です。日下部さんは(おそら
>くは)私の記事の内容を理解された上で記事を書かれているのですから、
>「お互い様」ではないと思います。

となると、かたや判り、かたや判らなかったわけですから、
控えめに言う必要がなくなる、つまり
「お互い様以下」だった、ということでしょうか。

> 「はい。」の一言でどんな事実が伝わったんでしょう。

それって <void-04070...@nhdr1-757.nirai.ne.jp> の、
>> scanf固有の問題でしょうか。
>はい。

「scanf固有の問題だ」ということが、では?

> 発言者たる日下部さんが私に何を言おうとしていたのか分からないの

「言おうとした」を判ろうとすることもないような。
そんなの判るわきゃないっす。
「言った」を判ればいいのでは?

> 中村さんが十分理解出来たと仰しゃるなら、代わりに解説してくれま
>せんか。(人に言葉遣いを指南して下さるぐらいの方ですから、期待し
>ています。)
> それとも日下部さんの意図(意見)など無視しろと仰しゃるのでしょ
>うか。

scanfの問題「を」俺が人に説明できるほど理解しているわけじゃないです。
ってゆーかミジンコレベルです。なので、解説は無理です。
言葉遣い(じゃないんだけどまぁいいか)についてです、俺が言ったのは。
#だよね?

意見は無視しないほうがいいと思います(勿論、その言葉の
内容を吟味したうえで無視するに値すると判断するなら別ですが)。
が、意図は明示されてない限り却って(笑)無視くらいすべきかと。
だって、明示されてない意図なんてもんは
「憶測」(それはそれでかなりの失礼(笑))なんですから。

> 「皮肉を言うよりも先に言うべき言葉」とは何でしょうか。

例えば、「事実」がお好きな人にとっては、
「事実を得るために必要な言葉」、でしょうね。
「皮肉」より先に、それを駆使する「必要」が(その人には)
あるのではないかと憶測(笑)します。

> 何か問題があるなら遠慮なく仰しゃって下さい。

現時点で言いたい事は(多分常に遠慮無く)言ってます。

「意味」と「意図」を混同せんでくれ、という
日本語(言語)レベルの不安(笑)です。俺にあるのは。
なので、

>次に相手の意
>見が理解出来なかったことを(少々皮肉な表現で)告白し、

まさか、あの超短い意見「を」理解できなかったんだろうか?と
思ってしまうです。

>表現が皮肉過ぎたという点は反省しています。

表現や言葉遣いの問題とは、微妙に違うと思う。
日本語が「正しい」かどうかの問題だと思う。


keizi kounoike

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
鴻池です。

"Nakamura Akifumi" <BXQ0...@nifty.ne.jp> wrote in message
news:20000711151...@nifty.ne.jp...
> 中村っす。


>
> > 発言者たる日下部さんが私に何を言おうとしていたのか分からないの
>
> 「言おうとした」を判ろうとすることもないような。
> そんなの判るわきゃないっす。
> 「言った」を判ればいいのでは?
>

そうですか。義務教育を含め(fjなんかも同じですが),先生とかの授業では,ほ
とんどの生徒は 「言おうとした」ことを分かろうとしているのでは。例えば,物理
の授業で「この長さの違う2つの振り子を良く見て下さい」といった時,ああ,「長
さの違う2つの振り子が振れているな。」と言ったことの事実だけを判るだけでよい
のでしょうか。(また変な喩でなんとも言えませんが。)

> 「意味」と「意図」を混同せんでくれ、という
> 日本語(言語)レベルの不安(笑)です。俺にあるのは。
> なので、
>

日本語の書き言葉や話言葉って,そんなに厳格なものだとは知りませんでした。例え
ば次の2つの文の違いは,私には分かりません。(あまり,そういうことにこだわる
と木を見て森を見ずということにもなりかねないのでは。)
・どういう意味だか分からない。
・どういう意図だか分からない。

> まさか、あの超短い意見「を」理解できなかったんだろうか?と
> 思ってしまうです。
>

これは,あまり一般性が無いように私は思いますが。
あの超短い意見では,「scanf固有の問題だ」という意見であることは分かります
が,それを「理解」できる人は,scanfを知り尽くした人だけが可能だと思います。
まあ,このグル-プの大勢の方は,それで理解できるのかも知れませんが,私なんか
とても不可能です。
それぞれのレベルの範囲で会話に加われということかも知れませんが,絶対的な真理
のような書き方に思えたので,一言余計な記事ということで。

--
********************************
< keizi kounoike >
********************************


Narita Takaoki

unread,
Jul 11, 2000, 3:00:00 AM7/11/00
to
成田です。

# なんか読解結果がスパゲッティー(蕎麦?^^;)になっているような・・・

keizi kounoike <koun...@kms.ac.jp> wrote in message news:8ket06$c5e$1...@kmsnews.kms.ac.jp...


> 鴻池です。
>
> "Nakamura Akifumi" <BXQ0...@nifty.ne.jp> wrote in message
> news:20000711151...@nifty.ne.jp...
> > 中村っす。
> >
> > > 発言者たる日下部さんが私に何を言おうとしていたのか分からないの
> >
> > 「言おうとした」を判ろうとすることもないような。
> > そんなの判るわきゃないっす。
> > 「言った」を判ればいいのでは?
> >
>
> そうですか。義務教育を含め(fjなんかも同じですが),先生とかの授業では,ほ
> とんどの生徒は 「言おうとした」ことを分かろうとしているのでは。

まぁ、「言った(書かれた)」結果(文章:字面)を見て「言お
うとした(書こうとした)」こと、「文意」を汲み取る能力を育て
るのが、「現代国語」教育の一つの目標でしょうね。

> > 「意味」と「意図」を混同せんでくれ、という
> > 日本語(言語)レベルの不安(笑)です。俺にあるのは。
> > なので、
> >
>
> 日本語の書き言葉や話言葉って,そんなに厳格なものだとは知りませんでした。例え
> ば次の2つの文の違いは,私には分かりません。(あまり,そういうことにこだわる
> と木を見て森を見ずということにもなりかねないのでは。)
> ・どういう意味だか分からない。
> ・どういう意図だか分からない。

文意=意味は文章に貼っついているわけですけれど、そ
れとは別の話として、文章を書く場合、その文章を著者が
何らかの目的のために書くわけですが、その目的を中村
さんは「意図」と言われているのでしょう。

例えば、選挙時の怪文書の場合、「某氏は賄賂を受け取
った」と書かれていたら、意味はそのまま「某氏が賄賂を
受け取った」ですが、文書の作成者の「意図」は「某氏を
貶め、選挙で落選させる」にあると見るのが通常でしょう。

こういったことかと。

# と中村氏の記事の「意味」を解釈してみました。(^^;

そういった視点では、恐らく多くの日本人の場合、意図を
読み解く学校教育は受けていないでしょう。

# 強いてあげれば、道徳?(修身てのもある?)

> > まさか、あの超短い意見「を」理解できなかったんだろうか?と
> > 思ってしまうです。
> >
>
> これは,あまり一般性が無いように私は思いますが。
> あの超短い意見では,「scanf固有の問題だ」という意見であることは分かります
> が,それを「理解」できる人は,scanfを知り尽くした人だけが可能だと思います。
> まあ,このグル-プの大勢の方は,それで理解できるのかも知れませんが,私なんか
> とても不可能です。
> それぞれのレベルの範囲で会話に加われということかも知れませんが,絶対的な真理
> のような書き方に思えたので,一言余計な記事ということで。

う~ん、コミュニケーションって難しい・・・(^^;;;;

--
Narita Takaoki @A.I.SOFT,INC.
『未知の謎が私をまっている、まだまだ死ねない』


Yoshiki Kataoka

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to
片岡です。


> > パスコンやフェライトビーズって、トラブって *から* 足すものでしたっけ

>
> そうです。

(絶句)


> クロックが1MHzとか、2MHzのころの(まっとうでない)マイコン的発想では、
> 波形にひげが出たら、コンデンサでごまかすとかいった,ひどいもんでした。

なるほど、ひどいですね。
クロックのファンアウトとか、してなかったんですね。
勉強になります。


> フェライトビーズは当時まだ無かったし必要性も無かった。
> すべてのICに1個づつパスコンがつくのはもっと後の時代です。
>
> 当時の解説書に、『グリッジを並列コンデンサで押さえてはいけない』と書いて
> あった

ひょっとして、グリッチのことですか?


> S100とかTRS80とか、あの当時の8ビットマイコンの回路図をみたら、担当者の
> 首をしめたくなりますよね。マイコン少年の自作PCならともかく、売り物のPCで
> あんな設計してはいけない。。

タイミングはCRで、パターン・ヒューズ入ってて・・・ですか?


いい加減は、スパゲッティにもザル蕎麦にも同様に分布している、
ということに過ぎませんね。マイコン屋というより、古参あるいは
アマ歴の長かった人の傾向でしょうかね。

Yuki Shiino

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to
 椎野です。

中村さんの記事<20000711151...@nifty.ne.jp>から


> fj.comp.lang.c の <8kcpr4$q7s$1...@news.cds.ne.jp> の
> 記事において 2000年07月11日(火) 00時24分16秒頃、
> Yuki Shiino <yu...@cds.ne.jp>さんは書きました。

> > 「はい。」の一言でどんな事実が伝わったんでしょう。


>
> それって <void-04070...@nhdr1-757.nirai.ne.jp> の、
> >> scanf固有の問題でしょうか。
> >はい。
>
> 「scanf固有の問題だ」ということが、では?

 事実が伝わっているので、「何が」scanf固有の問題かは気にするな、
と仰しゃるのでしょうか。「何が」scanf固有の問題なのか分からなく
とも十分だ、と言っている様に聞こえます。


> scanfの問題「を」俺が人に説明できるほど理解しているわけじゃないです。
> ってゆーかミジンコレベルです。なので、解説は無理です。

 いいえ。私がお願いしたのは別のことです。
 日下部さんが何を指して、scanf固有の問題だと言ったのかを教えて
欲しいと言っているのです。問題そのものの解説を頼んでいる訳では
ないです。「何が」scanf固有の問題なのですか。
 それとも「そんなことに耳を傾ける必要はない」と仰しゃるのでしょ
うか。


> 「意味」と「意図」を混同せんでくれ、という
> 日本語(言語)レベルの不安(笑)です。俺にあるのは。

> まさか、あの超短い意見「を」理解できなかったんだろうか?と
> 思ってしまうです。

 中村さんは「意見」についてはご理解されたのですよね。
 その「意見」には「何がscanf固有の問題なのか」は含まれないので
しょうか。
 含まれないとするならばお訊きします。それで、人の意見を理解した
と言えるのですか。(主語が何であるか分からないのに、文の意味が読
み取れると言うのでしょうか。)
 含まれるのならお訊きします。何がscanf固有の問題なのですか。

 もし「何が」scanf固有の問題なのか読み取れていないか、或いはそ
れを説明出来ないのであれば、私が質問することを何故妨げるのでしょ
うか。私はそれを知る必要はないと仰しゃるのでしょうか。
 「何が」scanf固有の問題かはとても肝心なことです。


成田さんの記事<8kf2pi$l1p$1...@epsongw6.epson.co.jp>から
> う~ん、コミュニケーションって難しい・・・(^^;;;;

 本当に。願わくば、彼が私の意見なり、記事の意味なりを理解して下
さいます様に。

--
椎野 裕樹 <yu...@cds.ne.jp>


Nakamura Akifumi

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to
中村っす。

fj.comp.lang.c の <8ket06$c5e$1...@kmsnews.kms.ac.jp> の
記事において 2000年07月11日(火) 19時35分52秒頃、
"keizi kounoike" <koun...@kms.ac.jp>さんは書きました。

>そうですか。義務教育を含め(fjなんかも同じですが),先生とかの授業では,ほ

>とんどの生徒は 「言おうとした」ことを分かろうとしているのでは。例えば,物理
>の授業で「この長さの違う2つの振り子を良く見て下さい」といった時,ああ,「長
>さの違う2つの振り子が振れているな。」と言ったことの事実だけを判るだけでよい
>のでしょうか。(また変な喩でなんとも言えませんが。)

というより、意図をいかに効率(?)よく意味に反映させられるか?を
(生徒も、またその先生も)練習したほうが、いいのでは?

まぁ、文脈に意図はキャッシュされる、とは俺も思いますけど。
だから、なんの前触れもなく上記のやりとりがあったら
そりゃ意図もなにも「ナイ(キャッシュが空)」ことになろうかと。

キャッシュのヒット率を上げるような話し方が
意図を伝えるためには効率の良い(=練習で目指すべき)
話し方(の一つ)なのかなと、思います。

>> 「意味」と「意図」を混同せんでくれ、という
>> 日本語(言語)レベルの不安(笑)です。俺にあるのは。

>日本語の書き言葉や話言葉って,そんなに厳格なものだとは知りませんでした。

曖昧にすることで泥沼にハマってるケースが
多いように思います。キャッシュミスが起きてるっていうか。

void氏は「文章を読む練習」って言ってるっすね。うん。
「意図を勘ぐる練習」じゃなくてさ。つまりそーゆーこと
なんだと思います。まぁvoid氏の意図(笑)を俺が勝手に
想像するのもまたアレだけど。#はまったか?

>あの超短い意見では,「scanf固有の問題だ」という意見であることは分かります
>が,それを「理解」できる人は,scanfを知り尽くした人だけが可能だと思います。

じゃあ「知りません」とか「教えろ」とか「知る方法は?」とかって
言えば済むしぃ。

#「誰が」知ってるかは、かなりどうでもいいし。特にfjでは(と俺は思う)。


Nakamura Akifumi

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to
中村っす。

fj.comp.lang.c の <8kfddi$hre$1...@news.cds.ne.jp> の
記事において 2000年07月12日(水) 00時10分35秒頃、
Yuki Shiino <yu...@cds.ne.jp>さんは書きました。

>> 「scanf固有の問題だ」ということが、では?
> 事実が伝わっているので、「何が」scanf固有の問題かは気にするな、
>と仰しゃるのでしょうか。「何が」scanf固有の問題なのか分からなく
>とも十分だ、と言っている様に聞こえます。

いえ。気になる人「が」気にしてください。
知りたい人が調べるっつーか。

つまり、「はい」に対する(俺が勝手に考えた)理想の答えは
「では内容は?」の一言(短さには拘らないが)、です。
#あ、これってusageなのか?

>> scanfの問題「を」俺が人に説明できるほど理解しているわけじゃないです。


> いいえ。私がお願いしたのは別のことです。
> 日下部さんが何を指して、scanf固有の問題だと言ったのかを教えて
>欲しいと言っているのです。問題そのものの解説を頼んでいる訳では
>ないです。「何が」scanf固有の問題なのですか。

#「別の事」と書いてありますが、この数行の範囲内で既に
#峻別に失敗してませんか?「「何が」scanf固有の問題なのですか」では
#もとの木阿弥では?

判っていません。

> 含まれないとするならばお訊きします。それで、人の意見を理解した
>と言えるのですか。(主語が何であるか分からないのに、文の意味が読
>み取れると言うのでしょうか。)

文の構造が理解できたように思います。#成功していればの話ですが。
個々の単語(?)の意味は理解できてないのでしょうけど。

ところで主語ですか?モトネタのあの質疑は、一つの
完結した(^^;疑問文へのYes/Noの答えだから、主語の心配を
することはないのでは…

> もし「何が」scanf固有の問題なのか読み取れていないか、或いはそ
>れを説明出来ないのであれば、私が質問することを何故妨げるのでしょ
>うか。

#妨げただぁ????
#もしかするとvoid氏にも「妨げられた」ように感じたのでしょうか。

> 本当に。願わくば、彼が私の意見なり、記事の意味なりを理解して下
>さいます様に。

知る必要が…(笑)

俺は、アチラが、俺の意図(笑)を採用(笑)して欲しいとは思います。
勿論関門は複数存在します。


Nakamura Akifumi

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to
中村っす。

fj.comp.lang.c の <8kf2pi$l1p$1...@epsongw6.epson.co.jp> の
記事において 2000年07月11日(火) 21時12分47秒頃、
"Narita Takaoki" <tak...@aisoft.co.jp>さんは書きました。

>> そうですか。義務教育を含め(fjなんかも同じですが),先生とかの授業では,ほ
>> とんどの生徒は 「言おうとした」ことを分かろうとしているのでは。
>

>まぁ、「言った(書かれた)」結果(文章:字面)を見て「言お
>うとした(書こうとした)」こと、「文意」を汲み取る能力を育て
>るのが、「現代国語」教育の一つの目標でしょうね。

小説の作者が「現代国語」教科の試験問題を見て
「これって全部マルやんけ?」と唸った、っていう
あれですね。困ったことではあります。

腹芸としても不要である、とは言いません。が、
腹芸である(言葉とはまた違う問題分野である)ことを
忘れないで欲しいなあ、と思うところです。

>> 日本語の書き言葉や話言葉って,そんなに厳格なものだとは知りませんでした。例え
>> ば次の2つの文の違いは,私には分かりません。(あまり,そういうことにこだわる
>> と木を見て森を見ずということにもなりかねないのでは。)
>> ・どういう意味だか分からない。
>> ・どういう意図だか分からない。

他の(例えば森の)部分に拘るのは、拘りたいとき
(あるいは拘らないとならないとき:判定ミスは自己責任)にやります。
それが(俺にとって)今ではないというだけです。
#scanfについては皆さんやってるし、void氏の意図はvoid氏に訊けばいい。

そうですね、例示された二つは、違いが「見過ごされがち」
なものかも知れません。困ったことに。
俺もぼーっとしてたら見過ごすかも。
どう違うの?と訊かれたら「見た(=意味)まんまやんけ」としか
言いようがないです。腹芸が加われば「そう訊いた人の思惑(=意図)」が
判る時もあるでしょうね。読みが外れる時もあるし。
例えば「書き間違い」をすれば「意味」がおかしくなりますが
「意図」は変わりません。でも「読み手が」それを区別できる保証はないです。
なにせどちらも文字で表現されてるだけですから。

>例えば、選挙時の怪文書の場合、「某氏は賄賂を受け取
>った」と書かれていたら、意味はそのまま「某氏が賄賂を
>受け取った」ですが、文書の作成者の「意図」は「某氏を
>貶め、選挙で落選させる」にあると見るのが通常でしょう。

># と中村氏の記事の「意味」を解釈してみました。(^^;

(俺にとっては)そうです。

>そういった視点では、恐らく多くの日本人の場合、意図を
>読み解く学校教育は受けていないでしょう。
># 強いてあげれば、道徳?(修身てのもある?)

っていうか俺風にいえば、意味と意図の区別も、
学校教育されてないかなと。

道徳は、そういう段階をすっとばしていきなり
意図(かな)の採点をすることを教える教科なので(笑)…
#あるいは最近は改善されたのかな?だといいなぁ。

友人がよく嘆いています。
「行を読む前に行間を読もうとするな」と。


saitoh akinori

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to
大阪大学の齊藤です

Yoshiki Kataoka wrote:
>
> 片岡です。
>
> > > パスコンやフェライトビーズって、トラブって *から* 足すものでしたっけ
> ?
> >
> > そうです。
> (絶句)

いまでこそ、フェライトビーズやパスコンはないと動かないか、ノイズ放射の
点その他で不適格な商品になってしまうかですから、必ず入れるものです.
しかし、クロックが遅い時代には、パスコンは無くてもかまわない(ちゃんと動

するし、ノイズ放射も気にしてなかった)のは事実でしょう.もちろん、パスコン

まったく不用という意味ではなくて、今のようにICの数の何倍もの数のパスコン
まみれの回路にしなくとも,電源ラインに数個入れておけばOKというだけですが.


> > クロックが1MHzとか、2MHzのころの(まっとうでない)マイコン的発想では、
> > 波形にひげが出たら、コンデンサでごまかすとかいった,ひどいもんでした。
>
> なるほど、ひどいですね。
> クロックのファンアウトとか、してなかったんですね。

ファンアウトじゃないです.ゲート遅延をちゃんと考えてないつーか.
簡単な例だと,

X AND NOT Y を ANDゲートと NOTゲートで作ると,
で、(X=0,Y=0) → (X=1, Y=1)へ XとYが同時に変化すると、
NOTの遅延時間の分だけひげが出ます.

だいたい74シリーズの規格表を見てもらうとわかりますが,カウンタも
初期のものは非同期カウンタばかりで、同期カウンタはやっと160番代に
なってから出てきます.

> タイミングはCRで、パターン・ヒューズ入ってて・・・ですか?

セットアップタイムとホールドタイムの意義がわかってない、だったかしら?
バスの read/write モードがCPUから出力されているのにそれを使わずに、
IOW | MEMWR とwriteすとろーぶ2種をORして READ/!WRITE 信号にしてたのは
TRS-80


齊藤明紀 sai...@ics.es.osaka-u.ac.jp

Yoshiki Kataoka

unread,
Jul 12, 2000, 3:00:00 AM7/12/00
to
片岡です。


> いまでこそ、フェライトビーズやパスコンはないと動かないか、ノイズ放射の
> 点その他で不適格な商品になってしまうかですから、必ず入れるものです.

ないと動かないような場合、もっと大きなミスを疑いませんか?
データに「ここに 104」などと書いてある場合は別として、
パスコンの容量や内部抵抗などいちいち計算せずに入れています。


> しかし、クロックが遅い時代には、パスコンは無くてもかまわない(ちゃんと
> 動作するし、ノイズ放射も気にしてなかった)のは事実でしょう.

遅いクロックを、過去のものと言い切られます?


> まったく不用という意味ではなくて、今のようにICの数の何倍もの数のパスコン
> まみれの回路にしなくとも,電源ラインに数個入れておけばOKというだけですが.

電源ラインに数個のキャパシタは、
高周波ノイズをバイパスするコンデンサとは
意味が違うと思っていましたが?


> ファンアウトじゃないです.

同期式回路のことだったんですけど


> だいたい74シリーズの規格表を見てもらうとわかりますが,カウンタも
> 初期のものは非同期カウンタばかりで、同期カウンタはやっと160番代に
> なってから出てきます.

APPLE ][ null より昔の話なのですね。
私には out of 年代です。

# PMOS ですか


> セットアップタイムとホールドタイムの意義がわかってない、だったかしら?
> バスの read/write モードがCPUから出力されているのにそれを使わずに、
> IOW | MEMWR とwriteすとろーぶ2種をORして READ/!WRITE 信号にしてたのは
> TRS-80

データが手元にないので、Tsetup と Thold についてはちょっと...

Yuki Shiino

unread,
Jul 13, 2000, 3:00:00 AM7/13/00
to
 椎野です。引用順は前後してます。

中村さんの記事<20000712153...@nifty.ne.jp>から


> > 本当に。願わくば、彼が私の意見なり、記事の意味なりを理解して下
> >さいます様に。
>
> 知る必要が…(笑)

 フォロー記事は書くが、相手の意見を知る気はない、と解釈して宜し
いでしょうか。

 今回はそうではないとして記事を書かせて貰います。

> 文の構造が理解できたように思います。#成功していればの話ですが。
> 個々の単語(?)の意味は理解できてないのでしょうけど。

 それで記事の意味(日下部さんの意見)が理解出来たというのでしょ
うか。下の引用を読む限りにおいては理解出来たと言っている様に読め
ますが。

中村さんの記事<20000711151...@nifty.ne.jp>から


> まさか、あの超短い意見「を」理解できなかったんだろうか?と
> 思ってしまうです。

 文の構造が理解出来たということと、意見が理解出来たということは
別です。

中村さんの記事<20000712153...@nifty.ne.jp>から


> ところで主語ですか?モトネタのあの質疑は、一つの
> 完結した(^^;疑問文へのYes/Noの答えだから、主語の心配を
> することはないのでは…

 私が問題にしている文は下の引用にある文です。

中村さんの記事<20000711151...@nifty.ne.jp>から
> 「scanf固有の問題だ」ということが、では?

 「scanf固有の問題だ」の主語は何ですか。

中村さんの記事<20000712153...@nifty.ne.jp>から


> >> scanfの問題「を」俺が人に説明できるほど理解しているわけじゃないです。
> > いいえ。私がお願いしたのは別のことです。
> > 日下部さんが何を指して、scanf固有の問題だと言ったのかを教えて
> >欲しいと言っているのです。問題そのものの解説を頼んでいる訳では
> >ないです。「何が」scanf固有の問題なのですか。
>
> #「別の事」と書いてありますが、この数行の範囲内で既に
> #峻別に失敗してませんか?「「何が」scanf固有の問題なのですか」では
> #もとの木阿弥では?

 何故(why)、どの様(how)に問題なのかを訊ねているのではなく、何が
(what)問題なのかをだけ訊ねているのです。仮令、問題を理解していな
くとも「意見」が理解できたと仰しゃるなら対象(what)が何であるかは
分かる筈です。

> >> 「scanf固有の問題だ」ということが、では?
> > 事実が伝わっているので、「何が」scanf固有の問題かは気にするな、
> >と仰しゃるのでしょうか。「何が」scanf固有の問題なのか分からなく
> >とも十分だ、と言っている様に聞こえます。
>
> いえ。気になる人「が」気にしてください。
> 知りたい人が調べるっつーか。
>
> つまり、「はい」に対する(俺が勝手に考えた)理想の答えは
> 「では内容は?」の一言(短さには拘らないが)、です。
> #あ、これってusageなのか?

 何の内容を訊ねろと仰しゃるのでしょうか。
 何を問題視されているのかも分からないのに、その問題に付いて語ら
れても理解出来ません。


--
椎野 裕樹 <yu...@cds.ne.jp>


Nakamura Akifumi

unread,
Jul 13, 2000, 3:00:00 AM7/13/00
to
中村っす。

fj.comp.lang.c の <8ki7k9$dn5$1...@news.cds.ne.jp> の
記事において 2000年07月13日(木) 01時50分05秒頃、
Yuki Shiino <yu...@cds.ne.jp>さんは書きました。

>> > 本当に。願わくば、彼が私の意見なり、記事の意味なりを理解して下
>> >さいます様に。
>> 知る必要が…(笑)
> フォロー記事は書くが、相手の意見を知る気はない、と解釈して宜し
>いでしょうか。

え、だって、そっちも。

>> 文の構造が理解できたように思います。#成功していればの話ですが。
>> 個々の単語(?)の意味は理解できてないのでしょうけど。
>
> それで記事の意味(日下部さんの意見)が理解出来たというのでしょ
>うか。下の引用を読む限りにおいては理解出来たと言っている様に読め
>ますが。
>
>中村さんの記事<20000711151...@nifty.ne.jp>から
>> まさか、あの超短い意見「を」理解できなかったんだろうか?と
>> 思ってしまうです。
>
> 文の構造が理解出来たということと、意見が理解出来たということは
>別です。

文の構造が理解できて、かつその(構造の)中に書かれている
文字列が、あまりにも短い「はい」だったので、
さすがに理解できました。「ああ、疑問文に対する肯定なのだな」と。

>中村さんの記事<20000712153...@nifty.ne.jp>から
>> ところで主語ですか?モトネタのあの質疑は、一つの
>> 完結した(^^;疑問文へのYes/Noの答えだから、主語の心配を
>> することはないのでは…
>
> 私が問題にしている文は下の引用にある文です。
>
>中村さんの記事<20000711151...@nifty.ne.jp>から
>> 「scanf固有の問題だ」ということが、では?
>
> 「scanf固有の問題だ」の主語は何ですか。

主語って、対応する疑問文を書いた人(椎野さんですね)がご存知なのでは?
なにせ疑問文に対する答えは「はい」だけですから、主語もなにも。

>中村さんの記事<20000712153...@nifty.ne.jp>から
>> >> scanfの問題「を」俺が人に説明できるほど理解しているわけじゃないです。
>> > いいえ。私がお願いしたのは別のことです。
>> > 日下部さんが何を指して、scanf固有の問題だと言ったのかを教えて
>> >欲しいと言っているのです。問題そのものの解説を頼んでいる訳では
>> >ないです。「何が」scanf固有の問題なのですか。
>>
>> #「別の事」と書いてありますが、この数行の範囲内で既に
>> #峻別に失敗してませんか?「「何が」scanf固有の問題なのですか」では
>> #もとの木阿弥では?
>
> 何故(why)、どの様(how)に問題なのかを訊ねているのではなく、何が
>(what)問題なのかをだけ訊ねているのです。仮令、問題を理解していな
>くとも「意見」が理解できたと仰しゃるなら対象(what)が何であるかは
>分かる筈です。

違うでしょ。「日下部さんが」って書かれているじゃないですか。
#ならば訊く先は日下部さんであるような。
##無論、俺のほうも「間違っている」可能性沢山あるわけで。

それはさておきwhat。上記のように主語は椎野さんが
ご存知でしょうから、椎野さんにとっては自明なのでは?

>> つまり、「はい」に対する(俺が勝手に考えた)理想の答えは
>> 「では内容は?」の一言(短さには拘らないが)、です。
>> #あ、これってusageなのか?
>
> 何の内容を訊ねろと仰しゃるのでしょうか。
> 何を問題視されているのかも分からないのに、その問題に付いて語ら
>れても理解出来ません。

なるほど。内容っていう単語は妥当じゃなかったですね。
失礼つーかしまった。
ナニを訊ねろって、そりゃ「(自分が)知りたいことを」でしょうね。


Yuki Shiino

unread,
Jul 15, 2000, 3:00:00 AM7/15/00
to
 椎野です。

中村さんの記事<20000713164...@nifty.ne.jp>から


> > フォロー記事は書くが、相手の意見を知る気はない、と解釈して宜し
> >いでしょうか。
>
> え、だって、そっちも。

 こちらは理解しようと努力はしているんですが。


> 文の構造が理解できて、かつその(構造の)中に書かれている
> 文字列が、あまりにも短い「はい」だったので、
> さすがに理解できました。「ああ、疑問文に対する肯定なのだな」と。

 結局、あなたには文法が理解できただけで、意味は理解できなかった
のですね。(疑問文の意味が理解出来ていなければ、その返答だけ知っ
ていても何の役にも立たない。)


> ナニを訊ねろって、そりゃ「(自分が)知りたいことを」でしょうね。

 はい。自分の知りたいことを訊ねてます。

--
椎野 裕樹 <yu...@cds.ne.jp>


Nakamura Akifumi

unread,
Jul 17, 2000, 3:00:00 AM7/17/00
to
中村っす。

fj.comp.lang.c の <8knair$mtc$1...@news.cds.ne.jp> の
記事において 2000年07月15日(土) 00時11分07秒頃、
Yuki Shiino <yu...@cds.ne.jp>さんは書きました。

> 結局、あなたには文法が理解できただけで、意味は理解できなかった
>のですね。(疑問文の意味が理解出来ていなければ、その返答だけ知っ
>ていても何の役にも立たない。)

まぁそんなところかもですね。尤も文法「を」見失えば
役に立てることも難しくなるでしょうけども。

>> ナニを訊ねろって、そりゃ「(自分が)知りたいことを」でしょうね。
> はい。自分の知りたいことを訊ねてます。

俺にもそうだけど、voidさんにはもう訊ねないっすか?


そういや忘れてたけど(俺が忘れるからイカンのだが…)、

void-05070...@nhdr1-757.nirai.ne.jp
>> 何か他に仰しゃりたいことがあったのでしたら、残念ながら読み取れま
>> せんでしたので解説をお願いしたいです。
>少しは文章を読む練習をしたらどうでしょう?

だったんですね。
つまり「何か他に言いたいコトなど、ない」
という意味だったんだったりして(笑)。

ってことはvoidさんに尋ねるのも、ちと違うってことになるかな。
#「知っている」のと「教える意欲がある」のとは、別。

流浪してください。


0 new messages