問題タブ [c-str]
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++03 と C++11 の c_str 関数仕様の違い
の C++リファレンスにc_str()
はstd::string
、次のように表示されます。
戻り値
基礎となる文字ストレージへのポインター。
data()[i] == operator[](i) for every i in [0, size())
(C++11未満)
data() + i == &operator[](i) for every i in [0, size()]
(C++11以上)
C++ 11以降、範囲が1要素増えることを除いて、2つの違いはわかりません。
前者の主張data()[i] == operator[](i)
は後者にも当てはまるのではないか。
c++ - String c_str() を使用して char* を返す
私はいくつかのレガシーコードに取り組んでおり、cppファイルにいくつかの変更を加える必要があります.cppファイルにはextern "c"ブロックにコード全体が含まれています-
char* を返す関数を更新しました。コードは以下の func1() のようになります。私は std::strring と stringstream を使用しているので、extern ブロックの前に sstream と string ヘッダー ファイルを含めました。以下の関数は、c ファイルと cpp ファイルの両方から呼び出されます。したがって、ここで std::string を返すことはできません -
この関数が呼び出される場所の 1 つで -
以下は私のクエリです
-1)(a)で、次の2つの形式でchar *を返すことができます.(b)でコピーしても未定義の動作が発生しないように決定する必要があります-
どちらがより良い解決策ですか?
c++ - ハッシュ関数での c_str() 対 const char* への関数呼び出し
かなり興味深いものを見つけたとき、私はstackoverflowのハッシュ関数を見ていました。const char* を size_t* にキャストしてから、size_t を逆参照する必要があります。これは、特定の精度にビットシフトされます。これは const char* に対して機能し、毎回同じ値を生成します。しかし、実際の文字列型を使用して代わりに c_str() を呼び出すと、生成される 2 つの値が一致しません。さらに、コードを実行するたびに、文字列は実行ごとに異なる値を生成します。なぜこれが起こっているのか誰にも分かりますか?
実行 1:
実行 2: