char *的交换功能

时间:2010-04-22 04:23:36

标签: c swap

我有一个简单的函数,它可以交换一个字符数组的两个字符。但是,我在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);

我正在使用VS2010和非托管C / C ++。谢谢!

2 个答案:

答案 0 :(得分:8)

您无法修改字符串文字。而是试试这个:

char s[] = "ABC"
swap(s, 0, 1);
printf("%s\n", s);

答案 1 :(得分:1)

“ABC”在RODATA部分,因此您无法更改它,请参阅汇编:

        .section        .rodata
.LC0:
        .string "ABC"