2013-02-14 11 views
0

我想用下面的代碼,以扭轉在Objective-C一個char *類型的字符串:XOR扭轉一個字符串的Objective-C得到一個錯誤

- (char *)reverseString:(char *)aString 
{ 

    unsigned long length = strlen(aString); 
    int end = length - 1; 
    int start = 0; 
    while (start < end) { 
     aString[start] ^= aString[end]; 
     aString[end] ^= aString[start]; 
     aString[start] ^= aString[end]; 

     ++start; 
     --end; 
    } 

    return aString; 
} 

但我在這行

得到一個錯誤EXC_BAD_ACCESS
aString[start] ^= aString[end] 

我GOOGLE了一下,發現有人說我不能修改一個字符串,因爲它是隻讀的。我是C新手,所以我想知道在這個例子中可以使用什麼簡單的數據類型(無對象)?當我使用(char [])aString替換(char *)aString時,我得到相同的錯誤。

回答

1

我假設你調用這個像

[myObj reverseString:"foobar"]; 

字符串"foobar"這裏是一個恆定的文本字符串。它的類型應該const char *,但是因爲C是braindead,所以它是char *。但它仍然是不變的,所以任何修改它的嘗試都會失敗。

聲明該方法爲char[]實際上沒有任何區別。當用作參數類型時,char[]char*相同。

這裏有兩種選擇。首先是在將字符串傳遞給方法之前複製字符串。第二種方法是將方法更改爲根本不修改其輸入字符串,而是將新字符串作爲輸出返回。兩者都可以使用strdup()完成。請記住,從strdup()返回的字符串稍後需要free()'d。

相關問題