3

以下に、文字の配列の2つの文字を交換する単純な関数があります。ただし、「Bla.exe の 0x01151cd7 で未処理の例外: 0xC0000005: アクセス違反の書き込み場所 0x011557a4」が発生します。エラー。2 つのインデックス (左と右) は、配列の制限内にあります。私は何を間違っていますか?

void swap(char* s, int left, int right) {
    char tmp = s[left];
    s[left] = s[right];
    s[right] = tmp;
}

swap("ABC", 0, 1);

アンマネージ C/C++ で VS2010 を使用しています。ありがとう!

4

2 に答える 2

8

文字列リテラルは変更できません。代わりにこれを試してください:

char s[] = "ABC"
swap(s, 0, 1);
printf("%s\n", s);
于 2010-04-22T04:26:08.030 に答える
1

「ABC」は RODATA セクションにあるため、変更できません。アセンブリを参照してください。

        .section        .rodata
.LC0:
        .string "ABC"
于 2010-04-22T05:13:33.150 に答える