問題タブ [c-strings]
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文字列を使用するのですか?
最近C++でC文字列を使用する正当な理由はありますか?私の教科書では、いくつかの点で例としてそれらを使用していますが、std::stringを使用するだけの方が簡単だと実感しています。
c - 「char s[]」ではなく、文字列リテラルで初期化された「char *s」に書き込むと、セグメンテーション違反が発生するのはなぜですか?
次のコードは、2 行目でセグ フォールトを受け取ります。
これは完全にうまく機能しますが:
MSVC および GCC でテスト済み。
c++ - CString と std::string std::wstring を相互に変換するにはどうすればよいですか?
CString
は非常に便利ですがstd::string
、STL コンテナーとの互換性が高くなります。を使用してhash_map
います。ただし、s をキーとしてhash_map
サポートしていないため、 を.CString
CString
std::string
ハッシュ関数を書くのCString
はかなり時間がかかるようです。
これどうやってするの?
私は正しいですか?
編集:
さらに質問があります:
wstring
からへCString
、またはその逆に変換するにはどうすればよいですか?
これに問題はありますか?
さらに、どうすれば からstd::wstring
へstd::string
、またはその逆に変換できますか?
mysql - MYSQL_ROW と row[0] を文字列型に?
MYSQL C API を使用して結果をクエリする場合。結果はMYSQL_ROW
型として返されます。MYSQL C API ドキュメントによると、これは簡単に行うことができますprintf("%s", row[0])
。row[0]
しかし、の内容を文字列または char*に転送したい場合はどうすればよいでしょうか?
c++ - c_str() が文字列を 2 回出力するのはなぜですか?
だから...私が行くとき:
私は得る:
しかし、私が行くとき:
私は得る:
なんで?
c - char**をchar*またはcharに変換する
いくつかのライブラリ関数が使用されている古いプログラムがありますが、そのライブラリはありません。
だから私はc++のライブラリを使ってそのプログラムを書いています。その古いコードには、このように呼ばれる関数があります
* string = newstrdup( "一部の文字列がここに表示されます");
文字列変数はchar**stringとして宣言されています。
「newstrdup」という名前の関数で彼は何をしているのでしょうか。私は多くのことを試みましたが、彼が何をしているのかわかりません...誰か助けてもらえますか
c - strtol、strtod は安全ではありませんか?
文字列の constness をキャストすることをstrtol()
効果的に許可 (および強制) しているようです。strtod()
上記では、自分でキャストを実行しませんでした。ただし、基本的には、警告などなしで、 myをfor mestrtol()
にキャストします。(実際には、 として入力することはできないため、安全でない型の変更が強制されます。) 本当に危険ではありませんか?const char *
char *
bar
const char *
c - char 配列と char ポインター
recvを使用してソケット経由でデータを受信すると、次のように気づきました。
私は受け取ります
mesgx��
「mesg」は私が送信したもので、ランダムな文字が追加されています。
私が使用する場合
代わりに、私は受け取ります
メッセージ
したがって、文字列にランダムなものが追加されることはありません。代わりに char[5] を使用しても同様に機能することがわかりましたが、その理由はよくわかりません。malloc(4) は本当に 5 バイトを割り当て、5 番目は NUL ですか?
c - sprintf(buffer、 "%s […]"、buffer、[…])は安全ですか?
このパターンを使用して、作業中のコードの文字列に連結するのを見ました。
そして私はそれが安全ではないとかなり確信していますC.あなたはそれbuffer
が出力と最初の入力の両方であることに気付くでしょう。
バッファオーバーフローの明らかな可能性は別として、関数の開始と終了の間でバッファが変更されないという保証はないと思います(つまり、バッファの状態が関数の実行)。sprintfのシグニチャは、ターゲット文字列がrestrict
edであることを追加で指定します。
memcpyでの投機的な記述の報告も思い出しますが、一部のCライブラリがsprintfで同じことを行う理由はわかりません。この場合、もちろん、それはそのソースに書き込みます。では、この動作は安全ですか?
参考までに、私は提案しました:
これを交換します。
c - c-string への書き込み
コードのセグメンテーション違反が発生し、その理由がわかりません。
gdbデバッガーは、問題が6行目にあり、charをc-stringに格納したい場所にあることを教えてくれます(左辺値ポインターの逆参照を使用する場合、それは同じ問題です)。これは彼が言うことです:
私は K&R-C の本から学んでおり、これは 2.8 章 (削除機能) の単純化された例です。どこに問題があるのか わかりません。