我是 Objective-C 编程的新手,当我运行我的小程序时收到这个错误(我只想生成一个随机字符)。所以这是我到目前为止所做的:

(IBAction)generate{
  int a = arc4random() % 26;
  NSString * chaine = @"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  char lettre = [chaine characterAtIndex:a];

  NSMutableString * mot = [[NSMutableString alloc] initWithCharacters:lettre length:1];
  hasard.text = mot;
}

我试图简单地将我的变量“lettre”放在 hasard.text 中,但它不会出现错误“不兼容的整数到指针转换分配给‘NSString *’中的‘char’。所以我创建了一个 NSMutableString 来包含我的角色。

当我在第五行手动放置字符“e”而不是变量“字母”时,它运行良好。由于我可以在调试器中看到 'lettre' 包含一个随机字母,为什么我会在标题中看到错误?
(EXC_BAD_ACCESS (code=2, address=0x42))

最佳答案

该函数需要一个指向字符的指针,你给它一个文字字符。您需要创建一个指向它的指针。此外,characterAtIndex 不会像您想象的那样返回字符。它返回一个 unicode 字符,它实际上是 unsigned short 而不是 unsigned char 。但是,如果您将代码更改为此,它将起作用:

const unichar foo = [@"Test" characterAtIndex:0];
NSString *test = [NSString stringWithCharacters:&foo length:1]; //Note the &

编辑 但最简单的方法就是这样:
char randChar = arc4random_uniform(26) + 'A'; //Changed in response to Jason Coco's comment
NSString *mot = [NSString stringWithFormat:@"%c", randChar];

关于Objective-c EXC_BAD_ACCESS(代码=2,地址=0x42),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11007868/

10-11 21:46