while循环中的EXC_BAD_ACCESS消息

时间:2014-03-27 11:16:09

标签: objective-c xcode5

是Objective-c的新手,是xcode的新手     在以下代码中,我在标记为B的行处获得EXC_BAD_ACCESS(代码= exc_1386_gpflt)     如果我注释掉标记为a的行,则其余代码按预期工作。     如果我注释掉标记为c的行,则其余代码按预期工作。     我错过了什么?

#import <Foundation/Foundation.h>
int main()
{
    @autoreleasepool
    {
      NSMutableArray *queue = 
        [NSMutableArray arrayWithObjects:nil];         // c
      NSMutableString *item = 
        [[NSMutableString alloc] initWithCapacity:20]; // c
      [item setString:@"WHBs default string"];         // c
      char select[1] = "x", entry[20];
      NSLog(@"=>1: %@", item);                         // c
      while (select[0] != '0')                   // a
       {
        NSLog(@"select [1-5, 0 for exit]:");
        scanf("%1s", select);                    // a
        if (select[0] > '0' && select[0] <= '9') // a
         {
          NSLog(@"ENQ: enter the item");
          scanf ("%s", entry);
          NSLog(@"=>2: %s", entry);
          [item setString:[NSString stringWithUTF8String:entry]]; // B, c
          NSLog(@"=>3: %@", item);  // c
          [queue addObject: item];  // c
          [queue addObject: item];  // c
          NSLog(@"=>4 contents of queue: %@", queue); // c
         }
        }
      NSLog(@"===> EXIT <===");
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

这里

char select[1] = "x"

不正确,与

相同
char select[1] = { 'x', '\0' }; 

你需要两个字符

char select[2] = "x"

一个用于结尾\ 0