反转字符串 c++ 时出现访问冲突错误



可能的重复项:
为什么在写入字符串时会出现分段错误?

以下简单函数应就地反转字符数组。

void reverse(char* str)
{
    char* last = str;
    // find end of the string
    while(*last) {
        ++last;
    }
    // swap characters until the pointers meet in the middle
    while(str < last)
    {
        --last; 
        char temp = *str;
        *str = *last;
        *last = temp;
        ++str;
    }
}
int main()
{
    char* a= "Hello";
    reverse(a);
    return 0;
}

代码将编译。但它会引发有关访问冲突的运行时错误。根据调试器,罪魁祸首是以下行:

char temp = *str;

知道为什么会这样吗?

char* a= "Hello";

指针a指向字符串文本。根据该标准,尝试修改字符串文本会导致未定义的行为。对于您的实现,分段错误表示编译器选择将字符串文本放在不可修改的内存中。

a声明为可修改的字符串。例如,像这样:

char a[] = "Hello";

最新更新