問題タブ [kernighan-and-ritchie]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - K&R の「ファイルのコピー」セクション
私はプログラミングが初めてで、コードで次のことが起こる理由を理解できないようです。
それで、いくつかの読書をした後、私は以下を集めました:
getchar()
保持機能であるため、Enter キーを押すまで何も実行されません。- Enterキーを押す前に、すべてのキーストロークがバッファに保存されます
- が
getchar()
呼び出されると、バッファ内の最初の値を参照し、その値になり、その値をバッファから削除します。
私の質問は、最初のコードを削除するとc = getchar()
、結果のコードが元のコードとまったく同じ機能を持つということです。なぜこれが起こるのですか?putchar(c)
コードを保持せず、c
まだ定義されていない を表示しようとするため、ランダムなシンボルが出力されるためですか? それが役立つ場合は、Code::Blocks を使用しています。
c - ディレクトリで「read」システムコールを使用する
K&R 2 (8.6 例 - ディレクトリの一覧表示)の例を見ていました。これは、Linux コマンドls
または Windows のdir
. この例は、 、 などの関数の実装を示していopendir
ますreaddir
。コードを単語ごとに入力しようとしましたが、まだ機能しません。実行することは、(現在のディレクトリの) ドットを出力して終了することだけです。
コード ( の実装readdir
) で見つけた興味深い点の 1 つは、システム コール likeopen
およびread
on ディレクトリを呼び出していたことです。何かのようなもの -
このコードを実行すると、フォルダー名"dirname"
にファイルが含まれていても出力が得られません。
また、この本には、実装はバージョン 7 および System V UNIX システム用であると書かれています。それがLinuxで動作しない理由ですか?
コードはhttp://ideone.com/tw8ouXです。
read
では、Linux はディレクトリに対するシステム コールを許可していないのでしょうか? それとも他の何かがこれを引き起こしていますか?
c - 配列外への書き込み
プログラミングの勉強を始めたばかりです。これは私の最初の投稿です。Kernighan と Ritchie による「C プログラミング言語」という本を読んでいて、理解できない例に出くわしました (セクション 1.9、p 30)。
このプログラムは、テキストを入力として受け取り、最も長い行を決定して、それを出力します。Char 配列 line[MAXLINE] が宣言されています。MAXLINE は 1000 です。これは、この配列の最後の要素が MAXLINE-1 のインデックス (999) を持っていることを意味します。しかし、関数 getline を見ると、line[ が渡されています。 ] 配列を引数として (そして MAXLINE を lim として) 使用すると、ユーザー入力が MAXLINE よりも 1 行長い場合、i = lim、つまり i = MAXLINE になるまで i がインクリメントされるように見えます。したがって、ステートメント line[i] = '\0' は line[MAXLINE] = '\0' になります。
これは私には間違っているように見えます.line[]のサイズがMAXLINEの場合、line[MAXLINE]の場所にどのように書き込むことができますか. 配列の外側の場所に書き込んでいませんか?
私が思いつく唯一の説明は、char 配列 [サイズ] を宣言すると、C 言語が実際に char 配列 [サイズ + 1] 配列を作成し、最後の要素が NULL 文字用に予約されているということです。もしそうなら、これはかなり紛らわしく、本では言及されていません。誰でもこれを確認したり、何が起こっているのか説明できますか?