1. ホーム
  2. c++

文字列ポインタと文字列配列 --- アクセス違反の書き込み位置エラー

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変数ということになります。