我想使用以下代码来反转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*
相同。
你有两个选择。第一种方法是在将字符串传递给方法之前复制该字符串。第二种方法是更改方法,使其根本不修改输入字符串,而是返回一个新字符串作为输出。两者都可以使用CCD_ 7来实现。只需记住,从strdup()
返回的字符串稍后需要是free()
'd。