簡體   English   中英

XOR反轉objective-c中的字符串會出錯

[英]XOR reverse a string in objective-c get an error

我想使用以下代碼來反轉objective-c中的char *類型字符串:

- (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]

我用谷歌搜索,發現人們說我無法修改文字字符串,因為它是只讀的。 我是C的新手,所以我想知道在這個例子中我可以使用什么簡單的數據類型(沒有對象)? 當我使用(char [])aString替換(char *)aString時,我得到了同樣的錯誤。

我假設你這樣稱呼它

[myObj reverseString:"foobar"];

這里的字符串"foobar"是一個常量的文字字符串。 它的類型應該const char * ,但因為C是腦死亡,所以它是char * 但它仍然是不變的,所以任何修改它的嘗試都會失敗。

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

你有兩個選擇。 第一種是在將字符串傳遞給方法之前復制字符串。 第二種方法是將方法更改為根本不修改其輸入字符串,而是將新字符串作為輸出返回。 兩者都可以使用strdup()來完成。 請記住,從strdup()返回的字符串將需要在以后free()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM