2016-09-28 65 views
0

我試圖使用堆棧扭轉一個字符串,但我得到的第二分割錯誤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

您的示例不完整。調用代碼丟失。例如,如果它是'ReverseString(NULL)',你的代碼就會崩潰。 –

+3

你會試圖扭轉一個litteral陣列? –

+0

確定但仍然是我得到的錯誤是: * q = temp.top(); –

回答

4

你的問題就嘗試當寫給q*q=temp.top();。字符串文字的類型爲const char[],這意味着它將獲得存儲的只讀內存,試圖覆蓋它是未定義的行爲和分段錯誤在這種情況下。實際上,一個好的編譯器應該已經警告過你從const char*char*。你應該把它複製到一個字符數組和編輯,像:

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

無論如何,這是非常類似C C++,我建議只使用std::stringstd::reverse(string.begin(), string.end())電話。

+0

一個好的現代編譯器應該已經_banned_從const char *轉換到char *'。 –

+0

@lightnessRacesinOrbit如果OP沒有編譯爲C++ 11或更高版本,則不應該如此:^) –

+0

_「一個好的現代編譯器」_我不認爲現代編譯器以非現代模式運行在這個類別中;) –