当我尝试更改字符串
中的字符时,为什么这段代码会抛出异常void reverseString(char *s)
{
int e = strlen(s) - 1;
int b = 0;
char t1,t2;
while(b < e)
{
t1 = s[b];
t2 = s[e];
s[b] = t2;
s[e] = t1;
b++;
e--;
}
}
答案 0 :(得分:4)
我的猜测是你正在测试它的字符串存储在只读内存中。你用字符串文字定义了吗?
稍后补充说明:
如果你这样做,
char *s = "Hello";
reverseString(s);
你可能会崩溃,因为字符串可以存储在只读内存中,而且大多数编译器会把它放在那里。
如果另一方面,你写,
char s[] = "Hello";
reverseString(s);
它会起作用。
答案 1 :(得分:2)
不要重新发明轮子,使用标准库的算法: std::reverse
void reverseString(char *s) {
std::reverse(s, s + strlen(s));
}
void reverseString(std::string &s) {
std::reverse(s.begin(), s.end());
}
注意:std :: string是可变的。