問題タブ [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.

0 投票する
18 に答える
7805 参照

c++ - なぜc++でc文字列を使用するのですか?

最近C++でC文字列を使用する正当な理由はありますか?私の教科書では、いくつかの点で例としてそれらを使用していますが、std::stringを使用するだけの方が簡単だと実感しています。

0 投票する
19 に答える
89859 参照

c - 「char s[]」ではなく、文字列リテラルで初期化された「char *s」に書き込むと、セグメンテーション違反が発生するのはなぜですか?

次のコードは、2 行目でセグ フォールトを受け取ります。

これは完全にうまく機能しますが:

MSVC および GCC でテスト済み。

0 投票する
16 に答える
225027 参照

c++ - CString と std::string std::wstring を相互に変換するにはどうすればよいですか?

CStringは非常に便利ですがstd::string、STL コンテナーとの互換性が高くなります。を使用してhash_mapいます。ただし、s をキーとしてhash_mapサポートしていないため、 を.CStringCStringstd::string

ハッシュ関数を書くのCStringはかなり時間がかかるようです。

これどうやってするの?

私は正しいですか?


編集:

さらに質問があります:

wstringからへCString、またはその逆に変換するにはどうすればよいですか?

これに問題はありますか?

さらに、どうすれば からstd::wstringstd::string、またはその逆に変換できますか?

0 投票する
3 に答える
3461 参照

mysql - MYSQL_ROW と row[0] を文字列型に?

MYSQL C API を使用して結果をクエリする場合。結果はMYSQL_ROW型として返されます。MYSQL C API ドキュメントによると、これは簡単に行うことができますprintf("%s", row[0])row[0]しかし、の内容を文字列または char*に転送したい場合はどうすればよいでしょうか?

0 投票する
4 に答える
2157 参照

c++ - c_str() が文字列を 2 回出力するのはなぜですか?

だから...私が行くとき:

私は得る:

しかし、私が行くとき:

私は得る:

なんで?

0 投票する
6 に答える
912 参照

c - char**をchar*またはcharに変換する

いくつかのライブラリ関数が使用されている古いプログラムがありますが、そのライブラリはありません。

だから私はc++のライブラリを使ってそのプログラムを書いています。その古いコードには、このように呼ばれる関数があります

* string = newstrdup( "一部の文字列がここに表示されます");

文字列変数はchar**stringとして宣言されています。

「newstrdup」という名前の関数で彼は何をしているのでしょうか。私は多くのことを試みましたが、彼が何をしているのかわかりません...誰か助けてもらえますか

0 投票する
4 に答える
5780 参照

c - strtol、strtod は安全ではありませんか?

文字列の constness をキャストすることをstrtol()効果的に許可 (および強制) しているようです。strtod()

上記では、自分でキャストを実行しませんでした。ただし、基本的には、警告などなしで、 myをfor mestrtol()にキャストします。(実際には、 として入力することはできないため、安全でない型の変更が強制されます。) 本当に危険ではありませんか?const char *char *barconst char *

0 投票する
4 に答える
4599 参照

c - char 配列と char ポインター

recvを使用してソケット経由でデータを受信すると、次のように気づきました。

私は受け取ります

mesgx��

「mesg」は私が送信したもので、ランダムな文字が追加されています。

私が使用する場合

代わりに、私は受け取ります

メッセージ

したがって、文字列にランダムなものが追加されることはありません。代わりに char[5] を使用しても同様に機能することがわかりましたが、その理由はよくわかりません。malloc(4) は本当に 5 バイトを割り当て、5 番目は NUL ですか?

0 投票する
3 に答える
15063 参照

c - sprintf(buffer、 "%s […]"、buffer、[…])は安全ですか?

このパターンを使用して、作業中のコードの文字列に連結するのを見ました。

そして私はそれが安全ではないとかなり確信していますC.あなたはそれbufferが出力と最初の入力の両方であることに気付くでしょう。

バッファオーバーフローの明らかな可能性は別として、関数の開始と終了の間でバッファが変更されないという保証はないと思います(つまり、バッファの状態が関数の実行)。sprintfのシグニチャは、ターゲット文字列がrestrictedであることを追加で指定します。

memcpyでの投機的な記述の報告も思い出しますが、一部のCライブラリがsprintfで同じことを行う理由はわかりません。この場合、もちろん、それはそのソースに書き込みます。では、この動作は安全ですか

参考までに、私は提案しました:

これを交換します。

0 投票する
5 に答える
1099 参照

c - c-string への書き込み

コードのセグメンテーション違反が発生し、その理由がわかりません。

gdbデバッガーは、問題が6行目にあり、charをc-stringに格納したい場所にあることを教えてくれます(左辺値ポインターの逆参照を使用する場合、それは同じ問題です)。これは彼が言うことです:

私は K&R-C の本から学んでおり、これは 2.8 章 (削除機能) の単純化された例です。どこに問題があるのか​​ わかりません。