使用堆栈反转字符串

时间:2016-09-28 09:18:35

标签: c++ string pointers

我正在尝试使用堆栈反转字符串,但是我在第二个while循环中遇到分段错误,不能说明原因:

void ReverseString (char *s)
{
    stack <char> temp;

    char *q = s;
    cout<<"Test1: "<<q<<endl;
    while(*q != NULL)
    {
        cout<<*q<<endl;
        temp.push(*q);
        q++;

    }
    q=s;

    while(temp.size() !=0)
    {

        *q=temp.top();

        temp.pop();
        q++;    
    }


}

1 个答案:

答案 0 :(得分:4)

尝试撰写q时遇到问题:*q=temp.top();。字符串文字属于const char[]类型,这意味着它将被存储为只读存储器,尝试覆盖它是未定义的行为,在这种情况下是分段错误。实际上,一个优秀的编译器应该已经警告过你从const char*char*的演员。您应该将其复制到char数组并进行编辑,例如:

char text[] = "Reversethis";
ReverseString(text);

无论如何,这是非常类似于C的C ++,我建议只使用std::string std::reverse(string.begin(), string.end())来调用。{/ p>