文字列ポインタと文字列配列 --- アクセス違反の書き込み位置エラー
2022-02-10 19:08:03
文字ポインタを使って文字列の文字を修正するプログラムを書いていて、実行時にプログラムがクラッシュしてしまうという問題がここ2日ほど発生しています。デバッグの際、ポップアップウィンドウがエラー - "アクセス違反の書き込み場所... "を報告しました。その後、データを確認してみると、文字列ポインタと文字列配列の概念がうまく区別されていないことがわかりました。念のため。
間違っている
プログラムコードは以下の通りです。
int _tmain(int argc, _TCHAR* argv[])
{
char *pStr = "hench"; //
char *p = pStr; //
*p = 'H'; // modify the first letter
return 0;
}
調べてみると、理由は以下のようにまとめられる。
<スパン
char *pStr = "ench"。
上記の宣言は、文字列ポインタであり、文字列定数が格納されているメモリを指し、読み取りは可能だが書き込みは不可能である。
pStr[n] = 'x' を直接修正したり、文字ポインタを使用して間接的に文字列の内容を修正すると、デバッグメッセージ " が表示されたままプログラムが実行されます。
アクセス違反の書き込み場所
エラーが発生しました。
<スパン
char cStr[] = "ench"。
上記の宣言は、文字列変数です。プログラムでは、"ench"が格納されているメモリ(読み取り専用領域)をcStrのメモリにコピーし、後から読み書きができるのはcStr変数ということになります。
関連
-
[解決済み] g++' は、内部または外部のコマンド、操作可能なプログラム、バッチファイルとして認識されません。
-
[解決済み] C++ ポインタの交換
-
[解決済み] MSVCP140D.dll が見つからないのですが、回避方法はあるのでしょうか?[クローズド]です。
-
[解決済み] クラスstringstream。lineStreamの動作、パラメータが理解できない。
-
[解決済み] protected コンストラクタの実用的な使い方は?
-
[解決済み] リンクリストの検索機能 - C++ [終了しました]。
-
[解決済み] gmockのデフォルトアクションの設定 / ON_CALLとEXPECT_CALLの比較
-
[解決済み] STL-pairのようなトリプレットクラス - 自分で転がすか?
-
[解決済み] C++のゲッターとセッターの書き方
-
C++ : [エラー] 'ostream' は型名ではありません。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: new types may not be defined in a return type
-
[解決済み] C++で出力ストリームを右寄せにする
-
[解決済み] Eclipse CDT: シンボル 'cout' が解決されませんでした。
-
[解決済み] cin.ignore()は具体的に何をするのですか?
-
[解決済み] 'cl' は内部コマンドまたは外部コマンドとして認識されません。
-
[解決済み] Visual Studioで、インクルードされたヘッダーファイルが「見えない」。
-
[解決済み] のベースオペランドが非ポインタ型である。
-
[解決済み] C++、ヘッダーファイルで構造体を宣言する方法
-
[解決済み] QTimer::singleShot(0, object SLOT(obj_slot())) は何をするのですか?
-
[解決済み] 式はクラス型を持つ必要があります。- クラスオブジェクトのベクトル