1

我在 Mac OS X 上遇到了一个简单的 NSString 问题:

NSString *letters = @"abcdefghijklmnopqrstuvwxyz0123456789";
myString = [myString stringByAppendingFormat:@"%c", [letters characterAtIndex:3]];

当我尝试再次访问此字符串时,Xcode 正在返回EXC_BAD_ACCESS 此错误,当我使用格式 @"%c" 时,当我使用 @"%@" 时,有时会出现相同的错误,有时会出现此字符串:control 0x10040a480和有时这样:

{(
    <CFRunLoopObserver 0x10015ac60 [0x7fff70731ee0]>{locked = No, valid = Yes, activities = 0x21, repeats = Yes, order = 0, callout = _ZL15FlushAllBuffersP19__CFRunLoopObservermPv (0x7fff88a147d4), context = <CFRunLoopObserver context 0x0>}
)}

即使我不更改代码中的任何内容并重新运行它,错误也会随机发生。

我尝试通过以下方式获取随机字符串:

randomString = @"";
    NSString *letters = @"abcdefghijklmnopqrstuvwxyz0123456789";
    srand(time(NULL));
    for (int i=0; i<5; i++)
    {
        randomString = [randomString stringByAppendingFormat:@"%c", [letters characterAtIndex:(rand()%[letters length])]];
    }

在 header.h 中声明了 randomString 我也尝试使用 NSMutableString 但这也不起作用。每次我尝试通过@"%@"我访问字符串(或可变字符串)时EXC_BAD_ACCESS

任何的想法?希望有人能帮助我!

问候,朱利安

4

2 回答 2

0

您的问题是myString在您访问它之前会自动发布。

你需要改变:

myString = [myString stringByAppendingFormat:@"%c", [letters characterAtIndex:3]];

到:

myString = [[myString stringByAppendingFormat:@"%c", [letters characterAtIndex:3]] retain];

完成后记得运行[myString release];

于 2011-11-20T15:17:36.170 回答
0

这对我有用:

在文件顶部定义字母:

#define letters @"abcdefghijklmnopqrstuvwxyz0123456789"

然后附加一个像这样的随机字符:

NSString *randomString = @"";

for (int i = 0; i < 5; i++) 
{
    UInt64 index = rand() % [letters length];
    NSString *randomCharacter = [letters substringWithRange: NSMakeRange(index, 1)];
    randomString = [randomString stringByAppendingString:randomCharacter];
}

NSLog(@"%@", randomString);
于 2011-11-20T15:26:22.757 回答