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

标签 c++ string c-strings

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

Unhandled exception at 0x00d110d9 in inteviews.exe: 0xC0000005: Access violation writing location 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;
}

编辑:

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

最佳答案

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

char *str = "abcad";

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

关于c++ - 使用指向 char 的指针时访问冲突写入位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8459010/

相关文章:

c++ - 如何声明对函数类型的 const 引用

c++ - 使用 gcc 的别名模板替换和推断失败

javascript - 如何在 JavaScript 中将位字符串编码为 UTF16 字符串而不浪费任何空间?

java - 数字到单词

c - 读取系统调用不检测文件结束

c - 以整数形式返回 C 字符串数组?

c - 定义的字符串是否设置为所有 NULL?

c++ - 固定大小缓冲区中的树实现

c++ - 我如何克服这个前向声明错误?

将 char * [] 转换为 C 中的字符串