使用指向char的指针时访问冲突写入位置

Ash*_*ban 5 c++ string c-strings

我正在写一个非常简单的程序,从字符串中删除重复的字符.我运行了visual studio并得到了错误:

inteviews.exe中0x00d110d9处的未处理异常:0xC0000005:访问冲突写入位置0x00d27830.

我真的不明白这是什么问题.当前单元格获取下一个单元格的值.

void remove(char *str, char a) {
    while (*str != '\0') {
        if (*(str+1) == a) {
            remove(str + 1, a);
        }

        *str = *(str +1 );//HERE I GET THE ERROR
        ++str;
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
    char *str = "abcad";

    while (*str != '\0') {
        remove(str,*str);
        str++;
    }

    std::cout << str << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:

我已经尝试将其更改为char str[] = "abcad"但我仍然得到相同的错误.

Bri*_*ach 9

您正在尝试修改字符串文字.你不能这样做.

char *str = "abcad";
Run Code Online (Sandbox Code Playgroud)

这是一个字符串文字.它是在只读内存中创建的,因此尝试写入它是一种访问冲突.


Mar*_*ers 6

一个问题是您创建了一个只读字符串文字并尝试修改它:

char *str = "abcad"; // String literals are read-only!
Run Code Online (Sandbox Code Playgroud)

您可以使用char数组:

char str[] = "abcad";
Run Code Online (Sandbox Code Playgroud)