問題タブ [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 - Kernighan/Ritchie コマンド ライン引数/オプション パラメータのセクション 5.10
初めてのポスター。誰かがこれで私を助けてくれることを望んでいました。セクション 5.10 で、Kernighan は、文字列を含むテキスト行を再印刷するプログラムの例を示しています。そこで、これを「find」としてフォルダーに保存し、cmd、次にフォルダーに移動して、find「-x anything」と入力しました。しかし、何らかの理由で「-」は登録されておらず、「-xwhatever」を1つの長い文字列として扱います。なぜこれが起こっているのか、誰にも手がかりがありますか?ありがとう。
c - K&Rのmallocコードは意味がありませんか?
このコードは、K&Rブック-第8章セクション7:例-ストレージアロケータからのものです。このコードは、少なくとも私にとっては意味がありません。「ヘッダー」は、構造体と「最も制限の厳しいアライメントタイプ」(ロングタイプ)の和集合です。その後、Mallocは、ヘッダーサイズの倍数のサイズの十分な大きさの空き領域を見つけます。
このコードの奇妙な部分は、ヘッダーのサイズに関して単位で十分な大きさのスペースを見つけるためnunits = (nbytes+sizeof(Header)-1)/sizeof(Header) + 1;
に比較で使用されるステートメントです。if (p->s.size >= nunits)
前者だけではいけませんnunits = (nbytes+sizeof(Header)) / sizeof(Header)
か?元のコードは、本来あるべき値よりも小さい値に評価されます。+ -1とは何ですか?必要なスペースよりも少ないスペースを割り当てる理由。
c++ - K&Rスタイルの関数定義はg++を使用してコンパイルします
次のような古いスタイルの関数定義を使用するACファイルをコンパイルする場合
g ++はエラーを出します:'a'はこのスコープで宣言されていません。gccはこれを解析できます。g ++にこれを認識させる方法はありますか?
私はcファイルとc++ファイルを組み合わせてコンパイルしているので、これは私にとって問題になります。関連する質問は、このタイプの混合ソースを構築するための標準的な方法は何ですか?すべてのファイルでg++を実行していますか、それともccファイルのみで実行していますか?前者は便利ですが、cとc ++の仕様に一貫性がないため、問題が発生し続けます(たとえば、char [4] = "four";)
c - k&r での getint のあいまいな定義、その中での ungetch の奇妙な動作
次のコードのいくつかの行を理解するのに大きな問題があります (コメントでマークされた番号):
最初 - 入力データで配列を埋めるループのコード:
関数定義は次のとおりです。
そう:
[1] ここで同様の投稿を読みました。このような不要な文字を取り戻すと、何らかの形でバッファがブロックされるため、別の関数を使用してクリアする必要があります。が K&R に含まれておらず、著者がそれを使用する必要性について言及していないのは奇妙ですか?
[2] なぜ 0 を返すのですか? それは main() プログラム全体を停止しますか? それとも単に配列に 0 を入れますか? ( getint(&array[n] ) ?
[3] 「大きな数」を計算するためにそのような式を実装する必要があるのはなぜですか? その関数は次々に数字を取得するだけなので(getwordではなくgetchar)、いくつかの単一の整数を使用して「大きな数字」を作成します。
[4a][4b] c != EOF の場合、なぜ unetch するのですか? ほとんどの場合、この条件が満たされているため、入力されたすべての数値を拒否することになりますか?
答えてくれてありがとう!
c - K&R からの文の正確性について不明 - ポインター演算 | 解放手順
引用:
テスト if (allocbuf + ALLOCSIZE - allocp >= n) { は、n 文字の要求を満たすのに十分なスペースがあるかどうかを確認します。存在する場合、allocp の新しい値は、allocbuf の終わりを超えて最大 1 になります。
関連するコード:
では、どうすれば allocbuf の最後の位置を超えることができるのでしょうか? 私の意見では allocbuf[9999]
それを超えるもの。allocbuf[10000] は正しくなく、メモリ リークですよね?
質問の 2 番目の部分 - その名前によると、afree 関数は配列内の特定の場所に保存された値を削除していると思います。しかし、私が見ることができるように、「記録ヘッド」を配列の左側に数か所移動するだけですか?そこに保存されたデータはそのまま残ります。
c - K&Rの境界が制限されたqsort | 文字列の次の位置で並べ替え手順が続行されない
K&Rプログラムについてさらに別の質問をしてご迷惑をおかけして申し訳ありません。しかし、やはりいくつかのことが私にはわかりません。以下のプログラムは、readlines関数によって保存された行をソートするために使用されます(実際に保存されていますか?)そのために、これらの各行を指すポインターの配列を作成します。
質問:[1]なぜ私たちはqsort(lineptr, 0, nlines-1);
nlinesだけでなくnlines-1を意味するのですか?
[2]2行入力したとします。
ブラボー
アルファ
現在、それらは配列からポイントされています(視覚化を行うので、角かっこで囲まれた文字を見て怒ってはいけません;))
* v [] ==[lineptr[0]-ブラボーへのポインター][lineptr[1]-アルファへのポインター]
アルゴリズムによると、lineptr [0]がピボットであるため、それらを交換します。最後=0; forループに入る:-lineptr[1]のstrcmpはlineptr[0]より字句的に小さくありません。iのインクリメントはすでに終了しているため、forループを終了します。ここで、last=0をleft=0と交換するので、何も起こりません。それらはすでに配置されています。
しかし、それらが同じ文字で始まる場合はどうなりますか。abravoとalfa、qsortが配列のインデックスを左から右にのみ操作する場合、qsortはどのように次の文字に進むのでしょうか。つまり、調べた文字列の次の文字ではなく、行数が異なります。
それらすべてのポインタが私を夢中にさせているので、私を訂正してください。
コード全体:
助けてくれてありがとう
c - gettoken 関数 - 不明な手順 (K&R)
いくつか質問があるので、質問された行が見つけやすいようにコメントに数字を入れます。
[1] 実際には存在しないトークン変数に char *p を割り当てるにはどうすればよいですか?
[2] ここに '\0' を入れないのはなぜですか? 他のすべての if 条件では何が行われますか?
[3] () をトークン文字列のみにコピーするのはなぜですか? [] と英数字の場合はそうしませんか?
[4] これらの return コマンドは奇妙な IMO です -> 最初に: なぜこの return PARENS のように見えないのか、2 つ目: tokentype = '(' を返すとき、それは char であるのに、関数 gettoken が整数を返すと宣言されているのはなぜですか?
[5] SUPPOSING part: let input be ( abc ) then: ( function to return tokentype '(' abc enter if condition (isalpha(C)) and the last ) exit that condition due to unetch. メインの else 条件に沿っていますか?私のウォークスルーは正しいですか?
前もって感謝します!
c - va_list プロシージャ内の for ループ、目的もなく使い続ける (?) K&R
こんにちは!次のコードについて疑問があります。
[1] for ループの中間条件はどういう意味ですか? ; *p;
そして; *sval;
- 入力文字列の終わりに達したか? はいの場合、それはどのように決定されますか?
[2] 複雑な for ループがわかりません。
条件が満たされない場合は、*p == %
すぐに切り替えを行うとします。次に、反対のケースを考えてみましょう。%
が満たされている場合でも、 1 つおきの文字を入力switch
します。これらの2つのケースの違いは何ですか? 私はsthでひどく間違っているに違いありませんが、2時間以上間違いを見つけることができません...
助けていただければ幸いです。
c - Linuxでread()を使用してgetcharを混乱させる
*bufp = buf と書くのはなぜですか。どちらも配列なので、私の意見では次のようにする必要があります。
/li>*bufp はどの位置から表示を開始するかをどのように「認識」しますか? ゼロに初期化されることはありません。に割り当て
buf
た後bufp
、戻り行では最後に入力された文字から始まると思います。unsigned char 修飾子は、入力の場合を省略するためにここで使用されていますか?ほとんどのシステム
-1
で意味がありますか?EOF
c - getcharに結合されたread()からの出力はありません
数時間前に、このコードの理論的側面について質問しました。今ではすべてを理解していますが、そのコードは単に出力を提供しません。http://ideone.com/LWMC5のコードへのリンクは次のとおりです
コード:
出力を生成するにはどうすればよいですか/追加しますか?