問題タブ [stdstring]
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++ - std::stringのC++ビット演算子
私の質問は、C++でビット演算子を使用する方法についてですstd::string
。オーバーロードを介して、または機能としては重要ではありません。
動作するXOR/^
関数の例std::string
:
私が今欠けているのは、NOT / ~
、AND/&
プラスOR/の代わりです|
。C ++コードの例(最後の2行で使用したい... :-P):
PHP/Perlでは厄介なことができます:-Pこのようなこと
...そして私はそれが欠けています;-)。ただし、XORは機能します。AND / OR / NOTを取得するにはどうすればよいですか?
c++ - C++でstd::stringの基本的なpreg_match_all置換を取得するには?
with "basic" の意味: 演算子 "+" (->following..) および "|" のみ (->or) が必要です。
プロトタイプ:
使用例:
マッチはその後、経由で利用できるはずですmatches[n]
。ブーストや PCREを使用せずにヒントを得た人はいますか? そうでない場合、ブーストでこれを実現するにはどうすればよいですか?
c++ - std::string 割り当ての実行中に C++ プログラムが常にクラッシュする
文字列に単純な代入をしようとしているときにクラッシュする (つまり、 * glibc が検出された * free(): 無効なポインター: 0x000000000070f0c0 *** をアサートする) アプリケーションのクラッシュをデバッグしようとしています。最適化レベルを -O2 に設定して、gcc 4.2.4 を使用して Linux システムでコンパイルしていることに注意してください。-O0 を指定すると、アプリケーションはクラッシュしなくなりました。
例えば
しかし、次のようにコードを変更すると、クラッシュしなくなりました
それでまた頭をかいた!しかし、興味深いパターンは、クラッシュがアプリケーションの後半に移動し、別の文字列で再び発生したことです。文字列の代入でアプリケーションが継続的にクラッシュするのは奇妙だと思いました。典型的なクラッシュ バックトレースは次のようになります。
これは非常に奇妙な動作だったので、アプリケーションをさらに調べて、この奇妙な動作を引き起こしている可能性のある何らかのメモリ破損 (ヒープまたはスタック) エラーが発生していないかどうかを確認しました。ptr の破損もチェックしましたが、手ぶらで出てきました。コードの目視検査に加えて、次のツールも試しました。
- memcheck と exp-ptrcheck の両方を使用する Valgrind
- 電気柵
- libsafe
- gcc で -fstack-protector-all でコンパイルしました
- MALLOC_CHECK_ を 2 に設定してみました
- コードを lint チェックと cppcheck (間違いをチェックするため) で実行しました。
- そして、gdb を使用してコードをステップ実行しました
だから私はたくさんのものを試しましたが、それでも手ぶらで出てきました。したがって、この問題を引き起こしている可能性があるのは、リンカーの問題やライブラリの問題のようなものではないかと考えていました。make が -O2 でクラッシュしやすい std::string に関する既知の問題はありますか、それとも最適化レベルとは関係ありませんか? しかし、私の問題でこれまでに確認できる唯一のパターンは、常に文字列でクラッシュするように見えることです。そのため、この種の動作を引き起こしている問題を誰かが知っているかどうか疑問に思っていました.
どうもありがとう!
c++ - g++ で -O2 を設定して std::string の代入を実行している間の解放が無効です
別の質問を開くことに爆破される前に、この質問は数日前に開いた別の質問に関連しています。
std::string 割り当ての実行中に C++ プログラムが常にクラッシュする
いくつかの回答に基づいてさらに調査した後、問題のデバッグに役立つ可能性のある質問と情報をさらに見つけました。
だからここに行きます...
問題のコード:
GDB バックトレース:
上記を説明すると、261 行目 (行番号についてはコード内のコメントを参照) で文字列の割り当て中にクラッシュが発生しています。何らかの理由で無効なメモリを解放しようとしますが、その理由がわかりませんか? それが解放しようとするアドレスは、217行目に割り当てられた空の文字列 (_M_p = 0x3c52020 が _M_p = 0x2abbad098e78 に設定される、つまり空の文字列) であると私が思っていたアドレスではありませんが、それほど遠くない他のアドレスです。
この問題を引き起こしている可能性のあるアイデアはありますか? -O0 では発生しないため、これが最適化の問題であるかどうか疑問に思っていました。コードを一連のテストで実行して、この奇妙な動作を引き起こす可能性のある多数のメモリ破損の問題を見つけようとしました... .手ぶらでやってきた!
もう 1 つの興味深い点は、std::string lStreamName = ""; を設定した場合です。std::string lStreamName の代わりに; プログラムがクラッシュしなくなりました??? これを引き起こす可能性のあるアイデアはありますか? この文字列を単純に初期化するだけでクラッシュが解消されるのはなぜですか?
ありがとう!
destructor - Qt で std::string を使用すると、破壊時に実行時エラーが発生します
関数出力が QString ではなく std::string である別のライブラリを使用する Qt アプリがあります。
だから私のプログラムにはメソッドがあります
外部ライブラリが空でない std::string を返すと、すべて正常に動作します。ただし、空の std::string が返されると、スコープの最後でアプリがクラッシュします。std::string オブジェクト (?) の破壊と関係があると思います。
空の std::string であっても、QString への変換は正常に機能します。
なぜこれが起こるのか、この実行時エラーを回避する方法を教えてもらえますか?
(他のスレッドでは、デバッグ ライブラリとリリース ライブラリの混合について話し合っている人もいますが、私はそれを行ったとは思いません。ところで、どうやって調べるのですか?)
c++ - std::string formatting like sprintf
I have to format std::string
with sprintf
and send it into file stream. How can I do this?
c++ - std :: stringイテレータを使用して、文字列の開始と終了を検索します
std :: stringイテレータだけが与えられた場合、文字列の開始点と終了点を決定することは可能ですか?文字列オブジェクトにアクセスできないため、string.begin()とstring.end()を呼び出すことができず、イテレータをインクリメントまたはデクリメントして値をテストするだけでよいと仮定します。
ありがとう、フィル
c++ - g++ を使用した NULL const char* による不適切な std::string 初期化の回避
NULL const char* を使用した std::string の不適切な初期化を検出できる g++ オプションはありますか?
私はいくつかの int フィールドを std::string フィールドに変換する過程にありました。
...になって:
0 による不正な 'id' 初期化を完全に見落としており、g++ は警告をまったく表示しませんでした。このエラーは実行時に検出されました (std::string コンストラクターが例外をスローしました) が、コンパイル時にそのようなものを検出したいと思っています。何か方法はありますか?
iphone - Objective-C/Cocoaでstd::basic_stringをNSStringに変換します
std :: basic_stringをNSStringに変換するにはどうすればよいですか?
c++ - マネージド c++ std::string がアンマネージド c++ でアクセスできない
std::string
アンマネージ C++ dll には、引数として定数を取る関数があります
この関数をマネージ C++ DLL から呼び出すには、std::string
.
アンマネージ C++ コードをデバッグすると、パラメーターimageSpec_
は値を正しく表示しますが、その値を他の変数にコピーすることはできません。
の長さをimageSpec_
0(ゼロ)として表示します。
このステートメント文字列のようにコピーしようとするstd::string sTempFileName(imageSpec_);
と、新しい文字列は空の文字列になります。
しかし、std::string sTempFileName(imageSpec_.c_str());
このステートメントでは文字列が正しくコピーされます。つまり、charpointer 文字列は正しくコピーされます。
この方法でコピーするには、アンマネージ C++ コードを大幅に変更する必要があります。
Visual Studio 6.0 でアンマネージド コードをビルドし、Visual Studio 2008 でマネージド C++ をビルドして
います。この問題を解決するマネージド C++ の特定の設定またはコードの変更はありますか?