[英]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.