0

に置き換えようとして'G''R'ますが、未処理の例外が発生しています。

int main()
{
    char *pszStr1 = "EFGH";

    (++pszStr1)[1] = 'R';

    printf("%s", pszStr1);
    return 0;
}
4

6 に答える 6

6

文字列が読み取り専用領域にあります。

代わりに、

int main()
{
    static char pszStr1arr[] = "EFGH";
    char *pszStr1 = pszStr1arr;

    (++pszStr1)[1] = 'R';
    printf("%s", pszStr1);
    return 0;
}
于 2013-08-12T08:52:35.470 に答える
3
int main()
{
    char *pszStr1 = "EFGH";

    (++pszStr1)[1] = 'R';

    printf("%s", pszStr1);
    return 0;
}

このコードpszStr1には文字列リテラルがあり、const char *pszStr1 = "EFGH";. 読み取り専用メモリ空間を変更しようとしています。

于 2013-08-12T08:52:26.440 に答える
0

char *pszStr1 = "EFGH";は定数であり、内容を変更すると不定になります。

コンテンツを変更したい場合は、配列を取得する必要があります。

char arr[] = "EFGH";

そして、あなたはこれを行うことができます:

arr[2] = 'R';
于 2013-08-12T08:55:20.587 に答える
0

現代の C では文字列リテラルは const であるため、宣言char *pszStr1 = "EFGH";が間違っていますconst char *pszStr1 = "EFGH";。多くのオペレーティング システムでは、それらは読み取り専用としてマークされたメモリ内のセクションになり、OS はそれらに書き込むことができないように強制します。文字列リテラルをスタック (またはヒープ) 上の一時文字列にコピーすると、プログラムは機能します。

int main()
{
    char str[5];
    char *pszStr1=str;
    strcpy(pszStr1,"EFGH");

    (++pszStr1)[1] = 'R';

    printf("%s", pszStr1);
    return 0;
}
于 2013-08-12T09:06:49.290 に答える