1

我试图在 C++ 中反转一个空终止的字符串。我写了下面的代码:

//Implement a function to reverse a null terminated string

#include<iostream>
#include<cstdlib>

using namespace std;
void reverseString(char *str)
{
    int length=0;
    char *end = str;
    while(*end != '\0')
    {
        length++;
        end++;
    }
    cout<<"length : "<<length<<endl;
    end--;

    while(str < end)
    {

        char temp = *str;
        *str++ = *end;
        *end-- = temp; 


    }

}
int main(void)
{
    char *str = "hello world";
    reverseString(str);
    cout<<"Reversed string : "<<str<<endl;
}

但是,当我运行这个 C++ 程序时,我在语句的 while 循环内遇到写访问冲突:*str = *end ;

尽管这相当简单,但我似乎无法弄清楚我收到此错误的确切原因。

你能帮我找出错误吗?

4

1 回答 1

5
char *str = "hello world";

是指向字符串文字的指针,不能修改。字符串文字驻留在只读内存中,尝试修改它们会导致未定义的行为。在你的情况下,崩溃。

由于这显然是一项作业,因此我不建议使用std::string它,因为学习这些东西很好。采用:

char str[] = "hello world";

and it should work. In this case, str would be an automatic-storage (stack) variable.

于 2012-09-07T09:13:54.387 回答