[解決済み] 文字列リテラル。どこに行くのか?
2022-05-07 17:17:44
質問
文字列リテラルがどこに割り当てられ、格納されるかに興味があります。
一つ興味深い回答がありました。 こちら と言っている。
インラインで文字列を定義すると、実際にはプログラム自体にデータが埋め込まれ、変更できなくなります(一部のコンパイラは巧妙なトリックでこれを許可していますが、気にしないでください)。
しかし、それはC++に関係することで、気にする必要はないと書いてあるのは言うまでもありません。
悩んでるよ =D
そこで質問ですが、私の文字列リテラルはどこに、どのように保存されているのでしょうか?なぜそれを変更しようとしない方がいいのでしょうか?プラットフォームによって実装が異なるのでしょうか?どなたか、quot;smart trick?"について詳しく教えていただけませんか。
解決方法は?
一般的な手法として、文字列リテラルを "読み取り専用データ" セクションに置き、読み取り専用としてプロセス空間にマッピングします(そのため、変更することができないのです)。
プラットフォームによって異なります。 例えば、シンプルなチップアーキテクチャでは、読み取り専用のメモリセグメントがサポートされていないため、データセグメントは書き込み可能なものとなります。
文字列リテラルを変更可能にするトリックを考え出すよりも(プラットフォームに大きく依存し、時間の経過とともに変更される可能性があります)、単に配列を使用することです。
char foo[] = "...";
コンパイラは、リテラルから配列が初期化されるように手配し、あなたは配列を変更することができます。
関連
-
[解決済み] Valgrind が初期化されていないバイトについて警告する
-
[解決済み] MIPSのネストされたForループと配列の使用
-
[解決済み] ⑭と⑯は何のためにあるのですか?
-
[解決済み] C関数から文字列を返す
-
[解決済み] C言語のi++と++iに性能差はあるのでしょうか?
-
[解決済み] .aファイル、.soファイルとは何ですか?
-
[解決済み] C++の複数行の文字列リテラル
-
[解決済み] なぜC言語では構造体を頻繁にtypedefする必要があるのですか?
-
[解決済み] LD_PRELOADのトリックとは何ですか?
-
[解決済み] C / Objective-Cで文字列リテラルを複数行にまたがるように分割するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
警告:代入がキャストなしで整数からポインタを作成する場合の修正方法に関する警告
-
C++の配列コピー
-
コンパイルエラー:可変長オブジェクトが初期化されていない可能性があります。
-
[解決済み] Linux Socket write() によるBad File Descriptor C
-
[解決済み] CコードでEOFを表現する?
-
[解決済み] ソケットアクセプト - "開かれているファイルが多すぎる"
-
[解決済み] printfにおけるdoubleの正しい書式指定子
-
[解決済み] C 言語の配列へのポインタ/ポインタの配列の曖昧さ解消
-
[解決済み] LD_PRELOADのトリックとは何ですか?