vs2015, 引发了异常: 写入访问权限冲突。s 是 0x151FCD4。

时间:2020-12-12 15:21:06
求助,写字符串翻转时遇到了这个问题:

引发了异常: 写入访问权限冲突。

s 是 0x151FCD4。


代码如下:


#include <iostream>
#include <string>
using namespace std;

void ReverseString(char*s, int from, int to)
{
while (from < to)
{
char t = s[from];
s[from++] = s[to];
s[to--] = s[from];
}
}
void Reverse(char* s)
{
int i = 0;
int j = 0;
while (true)
{
if (s[i] != ' '&&s[i] != '\0')
{
i++;
continue;
}
if (s[i] == '\0')
{
ReverseString(s, j, i - 1);
break;
}
ReverseString(s, j, i - 1);
j = i + 1;
i++;
}
ReverseString(s, 0, i-1);
}
void main()
{
char* s = "I am a student.";
Reverse(s);
cout << s<<endl;
delete s;
system("pause");
}


其中是
void ReverseString(char*s, int from, int to)
{
while (from < to)
{
char t = s[from];
s[from++] = s[to];
s[to--] = s[from];
}
}
中的s[from++] = s[to];报错

谢谢各位大佬了!!!!

3 个解决方案

#1


s[from]在常量数据区,能读不能写。"I'm student"所在的空间是只读的,也不是new出来的,不需要delete

#2


楼上正解
详情 百度字符串的不可变性
用别的变量存放改变后的值

#3


楼上正解
详情 百度字符串的不可变性
用别的变量存放改变后的值

#1


s[from]在常量数据区,能读不能写。"I'm student"所在的空间是只读的,也不是new出来的,不需要delete

#2


楼上正解
详情 百度字符串的不可变性
用别的变量存放改变后的值

#3


楼上正解
详情 百度字符串的不可变性
用别的变量存放改变后的值