-5

これが機能する理由を理解しようとしています:

char myst1r[] = "hello\n";
memmove(myst1r   , myst1r + 1 , 1 );//results in "eello"

この間:

char *mystr = "hello\n";
memmove(mystr , mystr + 1 , 1 );

「アクセス違反の書き込み場所」エラーになります。両方ともchar バッファーの最初のメンバーを指さmyst1rないでください。mystrここで何が恋しいですか?

4

2 に答える 2

4

myst1rイニシャライザのコピーを保持するの配列です。そのイニシャライザを指すポインタです。どちらの場合も、初期化子はリテラル文字列です。違いは、配列の内容は変更できますが、リテラル文字列の内容は変更できないことです。charmystrchar

于 2013-09-22T13:28:18.793 に答える