我正在尝试使用堆栈反转字符串,但是我在第二个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++;
}
}
答案 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>