問題タブ [standard-library]
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++ - スペースをC++入力ストリームでうまく再生する
まず、このサンプルC++コードを検討してください。
input1に「Gooddayneighbors」のように入力すると、input1は「Good」に設定され、input2は「day」に設定され、input3は「neighbors」に設定されます。input2とinput3の値を設定する機会さえ与えられていません。
だから私の質問は:スペースを含むテキストの文字列を(より良い用語がないために)分割せずに単一の文字列に入力して、入力ストリームへの後続の呼び出しにオーバーフローさせるにはどうすればよいですか?
受け取ったすべての回答に事前に感謝します。
c++ - std::ofstream オブジェクトが正しく閉じない理由は何ですか?
C++ コードで、std::ofstream
オブジェクトを閉じるたびに、で閉じたファイルを再度開くことができないことに気付きましたstd::ifstream
。std::ifstream
のopen
関数は常に失敗します。
std::ofstream オブジェクトが適切に閉じられるようにするためにできる「追加の」ことはありますか?
誰かが私の特定のコードを確認するように依頼する可能性があるため、この投稿を小さく保つために、ここに貼り付けました。ケース a または d を実行した後の私のコードでは、std::ifstream
開いているすべての呼び出しが失敗します。std::ofstream
(この質問を投稿する前に、何人かの人々に私のコードで遊んでもらいましたが、未知の理由で失敗したこと以外は何も結論付けることができませんでした)
受け取ったすべての応答に事前に感謝します。
コードは
c++ - stringstream は内部でどのように機能しますか?
私はパフォーマンスの文脈で尋ねています。stringstream は単なる文字列/ベクトルなので、それに書き込むと、コンテンツ全体がより大きなメモリのチャンクにコピーされる可能性がありますか、それともよりトリッキーな方法 (たとえば、文字列のリストなど) で行われますか?
c - C: strchr() と index() の違い
文字列の使用を必要とする C で何かを行っています (ほとんどのプログラムがそうであるように)。
マンページを見ると、string(3) で次のことがわかりました。
あらすじ
そこで、不思議なことに strchr(3) と index(3) の両方を調べました...
そして、両方が次のことを行うことがわかりました。
strchr()/index() 関数は、s が指す文字列内で最初に出現する c を見つけます。終端のヌル文字は文字列の一部と見なされます。したがって、c が '\0' の場合、関数は終端の '\0' を見つけます。
したがって、マンページは基本的にコピー&ペーストです。
その上、難読化された必要性のために、2 番目のパラメーターの型int
は ですが、実際にはchar
. 私は間違っていないと思いますが、なぜそれがint
ではなく なのか説明してもらえますchar
か?
両方が同じである場合、どちらがバージョン間でより互換性があり、そうでない場合、どちらが違いますか?
c++ - c ++ toupper-標準関数?
重複の可能性:
C++の文字列を大文字に変換する
こんにちは、C++の文字列を大文字に変換するためのポータブル関数が必要です。私は今toupper(char);を使用しています。働き。標準機能ですか?そうでない場合、プラットフォーム間でそれを行う正しい方法は何ですか?ところで、すべてのc++標準関数を一覧表示できるWeb/Wikiはありますか?ありがとうございました。
c++ - 文字列の連結が期待どおりに機能しない
これがよくある問題であることはわかっていますが、参考文献やその他の資料を探しても、この質問に対する明確な答えが見つかりません。
次のコードを検討してください。
コンパイラから、 のオーバーロードされた演算子が見つからないことがわかりましたchar[dim]
。
文字列に + 演算子がないということですか?
しかし、いくつかの例では、このような状況があります。これがより多くの文字列を連結する正しい方法でない場合、最善の方法は何ですか?
c++ - カスタム コンパレータを使用して priority_queue を返す
いくつかの入力パラメーターに基づいて並べ替えられたリストを返す必要がある関数があります。std::priority_queue
このリストを保持するために を選択しました。
しかし、コンパイラは私が認識できないエラーを出しています。ここに私が持っているコードがあります:
コンパイラはconversion from 'HeuristicList (*)(DepthCompare)' to non-scalar type 'HeuristicList' requested
、return ステートメントの行に a があると言います。
ポインターを返そうとしているようには見えません。何がうまくいかないのですか?
c++ - C ++標準ライブラリはCまたはアセンブリで作成する必要がありますか?
C ++のみを使用して完全なC++標準ライブラリ(もちろんSTLを含みますが、自己完結型で、内部依存関係のみ)を作成することは可能ですか?コンテナーと<cstdlib>
機能は、s、ビットシフト、forループ、その他のバイトの凝ったものの観点から実行可能だと思いchar
ますが、例外のようなもので、そもそも依存関係がなければ難しいようstd::cout
にstd::cin
思えます。(C汚染を回避するために)アセンブリで完全に実装された一連のOS機能が利用可能であるとしましょう。
コンパイラは、クラスや仮想関数からテンプレートや関数のオーバーロードまで、すべてを理解していると思います。これらは言語レベルのものであり、ライブラリIMHOにはありません。
これが以前に尋ねられた、または些細な愚かな質問である場合は、私を許してください。私はここでC<->C ++戦争を始めようとしているのではなく、標準ライブラリなどの獣を実装することの限界を理解しようとしているだけです...
ありがとう!
c++ - Python標準ライブラリに相当するC/C ++
ボイラープレートをスキップしてGetThingsDoneを実行するために、有用なデータ構造とマニピュレーター(たとえば、、)とユーティリティ(たとえば、、、)の両方について、Pythonの標準ライブラリに大きく依存しています。C ++標準ライブラリのドキュメントを見ると、Pythonの標準ライブラリに含まれる「バッテリー」の邪魔になるものはほとんどなく、完全にデータ構造に関するもののようです。collections
itertools
optparse
json
logging
Boostライブラリは、Python標準ライブラリに似ていることを私が知っている唯一のオープンソースC ++ライブラリコレクションですが、正規表現サポートなどのユーティリティライブラリはありますが、そのほとんどはデータ構造専用です。Pythoncsv
モジュールを使用して楽しくシンプルに作成されたCSVファイルの確実な解析と書き込みのような単純なものでさえ、C ++で独自にローリングする必要があるように見えることに本当に驚いています(Boostによる解析ライブラリを利用している場合でも)。
「バッテリー」を提供するC++用の他のオープンソースライブラリはありますか?そうでない場合は、C ++プログラマーとして何をしますか:個々のユーティリティライブラリを探しますか(もしそうなら、どのように)、または単に自分でロールします(これは面倒で無駄に思えます)?
c - C標準ライブラリのどの関数が一般的に悪い習慣を助長していますか?
これは、この質問と 1 つの特定の回答に対するコメントに触発されたstrncpy
もので、C の非常に安全な文字列処理関数ではなく、 に達するまでゼロをパディングすることを知りましたn
。
具体的には、Rを引用するには..
strncpy は null で終了せず、宛先バッファーの残り全体を null で埋めますが、これは非常に時間の無駄です。独自の null パディングを追加することで前者を回避できますが、後者は回避できません。「安全な文字列処理」関数として使用することを意図したものではなく、Unix ディレクトリ テーブルおよびデータベース ファイルの固定サイズ フィールドを操作するためのものです。snprintf(dest, n, "%s", src) は、標準 C で唯一正しい「安全な strcpy」ですが、かなり遅くなる可能性があります。ちなみに、切り捨て自体が重大なバグになる可能性があり、場合によっては特権の昇格や DoS につながる可能性があるため、問題が発生したときに出力を切り捨てる「安全な」文字列関数をスローしても、それを「安全」または「」にする方法にはなりません。安全"。その代わり、
そしてジョナサン・レフラーから
strncat() は、strncpy() よりもインターフェイスがさらにわかりにくいことに注意してください。長さの引数とは正確には何ですか? strncpy() などに基づいて期待するものではないため、strncpy() よりもエラーが発生しやすくなります。文字列をコピーする場合、 memmove() だけが必要であるという強い議論があるという意見が増えています。なぜなら、常にすべてのサイズを事前に知っており、事前に十分なスペースがあることを確認しているからです。strcpy()、strcat()、strncpy()、strncat()、memcpy() のいずれよりも memmove() を使用してください。
だから、私は明らかにC標準ライブラリに少し錆びています。したがって、私は次の質問をしたいと思います。
どの C 標準ライブラリ関数が不適切に使用されているか、またはセキュリティの問題/コードの欠陥/非効率性を引き起こす/引き起こす可能性のある方法で使用されていますか?
客観性を保つために、回答にはいくつかの基準があります。
- 可能であれば、問題の機能の背後にある設計上の理由、つまり意図された目的を挙げてください。
- コードが現在置かれている誤用を強調してください。
- その誤用が問題につながる可能性がある理由を述べてください。それは明らかなはずですが、それはソフトな答えを防ぎます。
避けてください:
- 関数の命名規則に関する議論 (これが明らかに混乱を引き起こす場合を除く)。
- 「私は y よりも x の方が好きです」 - 好みは問題ありませんが、私は実際の予期しない副作用とそれらを防ぐ方法に興味があります。
これは主観的なものである可能性が高く、明確な答えがないため、すぐにコミュニティ wiki にフラグを立てます。
私もC99に従って働いています。