c ++中的字符串反转

时间:2010-10-05 22:22:43

标签: c++ visual-c++

当我尝试更改字符串

中的字符时,为什么这段代码会抛出异常
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--;
    }
} 

2 个答案:

答案 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是可变的。