2014-06-14 46 views
0

我正在創建一個程序,將單詞的第一個字母放在單詞的後面,以便「單詞」將變成「ordW」,並且我已經完成了這項工作,但是當我決定放置該功能變成一個類它不起作用,我得到訪問衝突寫入位置我不知道它有什麼問題,我會顯示類代碼和原始代碼:使用指針寫入位置的訪問衝突

類代碼:

void Checking::test(char* first,char* buffer){ 
back = first; 
if (first != buffer + strlen(buffer) - 1){ 
    ++back; 
    temp = *first; 
    *first = *back; 
    *back = temp; 

    ++first; 
    test(first, buffer); 
} 
} 

注:變量「後退」和「溫度」是在類的頭,像這樣宣稱:

Char* back = NULL; 
Char temp = NULL; 

原始代碼:

void test(char* first, char* buffer){ 
char* back = first; 
if (first != buffer + strlen(buffer) - 1){ 
    ++back; 
    char temp = *first; 
    *first = *back; 
    *back = temp; 

    ++first; 
    test(first, buffer); 
} 
} 

我不知道使用相同的功能,但在一個類中時,爲什麼我收到錯誤。如果有人發現錯誤,他們可以解釋爲什麼我得到錯誤以及如何解決,謝謝。

+0

我會在這種情況下使用調試器。 – user877329

+0

「'char temp = NULL;'」。你爲什麼要這樣做? –

+0

在課堂上如何聲明'test'? – laune

回答

0

我認爲有一個錯字

Char* back = NULL; 
Char temp = NULL; 

應該有至少

char* back = NULL; 
char temp = NULL; 
是關鍵字 char與小寫字母c寫

至於你的功能是否有效。在調用函數之前,您應該首先檢查緩衝區的值。例如,如果首先指向終止零,則此條件爲

if (first != buffer + strlen(buffer) - 1){ 

將等於true,結果將與您得到的結果相同。

此外,我沒有看到任何意義定義返回和溫度外的功能。

考慮到,你可以使用標準的算法std::rotate

我會寫的成員函數如下方式

void test(char* buffer) const 
{ 
    if (*buffer && *++buffer) 
    { 
     char c = *buffer; 
     *buffer = *(buffer - 1); 
     *(buffer - 1) = c; 

     test(buffer); 
    } 
} 

它是更有效和更簡單,因爲它只有一個參數,並且不調用std::strlen每次。