3

我有一个简单的函数,它可以交换字符数组中的两个字符。但是,我收到“Bla.exe 中 0x01151cd7 处的未处理异常:0xC0000005:访问冲突写入位置 0x011557a4。” 错误。两个索引(左和右)在数组的范围内。我究竟做错了什么?

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 回答