0

我想使用以下代码来反转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 时,我得到了同样的错误。

4

1 回答 1

2

我假设你这样称呼

[myObj reverseString:"foobar"];

这里的字符串"foobar"是一个常量文字字符串。它的类型应该const char *,但是因为 C 是无脑死的,所以它是char *. 但它仍然是不变的,所以任何修改它的尝试都会失败。

将方法声明为采取char[]实际上没有任何区别。当用作参数类型时,char[]char*.

你在这里有两个选择。第一种是在将字符串传递给方法之前复制字符串。第二个是更改方法,根本不修改其输入字符串,而是返回一个新字符串作为输出。两者都可以使用strdup(). 请记住,从后面返回的字符串strdup()需要'd 。free()

于 2013-02-14T23:22:40.210 回答