exc坏访问-在objective-c中对字符串进行XOR反转,得到一个错误



我想使用以下代码来反转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。

最新更新