問題タブ [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.

0 投票する
3 に答える
498 参照

c - K&R の「ファイルのコピー」セクション

私はプログラミングが初めてで、コードで次のことが起こる理由を理解できないようです。

それで、いくつかの読書をした後、私は以下を集めました:

  1. getchar()保持機能であるため、Enter キーを押すまで何も実行されません。
  2. Enterキーを押す前に、すべてのキーストロークがバッファに保存されます
  3. getchar()呼び出されると、バッファ内の最初の値を参照し、その値になり、その値をバッファから削除します。

私の質問は、最初のコードを削除するとc = getchar()、結果のコードが元のコードとまったく同じ機能を持つということです。なぜこれが起こるのですか?putchar(c)コードを保持せず、cまだ定義されていない を表示しようとするため、ランダムなシンボルが出力されるためですか? それが役立つ場合は、Code::Blocks を使用しています。

0 投票する
2 に答える
4586 参照

c - ディレクトリで「read」システムコールを使用する

K&R 2 (8.6 例 - ディレクトリの一覧表示)の例を見ていました。これは、Linux コマンドlsまたは Windows のdir. この例は、 、 などの関数の実装を示していopendirますreaddir。コードを単語ごとに入力しようとしましたが、まだ機能しません。実行することは、(現在のディレクトリの) ドットを出力して終了することだけです。

コード ( の実装readdir) で見つけた興味深い点の 1 つは、システム コール likeopenおよびreadon ディレクトリを呼び出していたことです。何かのようなもの -

このコードを実行すると、フォルダー名"dirname"にファイルが含まれていても出力が得られません。

また、この本には、実装はバージョン 7 および System V UNIX システム用であると書かれています。それがLinuxで動作しない理由ですか?

コードはhttp://ideone.com/tw8ouXです。

readでは、Linux はディレクトリに対するシステム コールを許可していないのでしょうか? それとも他の何かがこれを引き起こしていますか?

0 投票する
4 に答える
301 参照

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 文字用に予約されているということです。もしそうなら、これはかなり紛らわしく、本では言及されていません。誰でもこれを確認したり、何が起こっているのか説明できますか?