为什么我得到"编程接收信号:" EXC_BAD_ACCESS"在NSString上可靠

时间:2012-10-16 10:06:50

标签: objective-c if-statement exc-bad-access

我刚刚开始学习Objective C,当我运行下一个程序时,我得到了错误 “程序收到信号:”EXC_BAD_ACCESS“ 对于代码行

 if([*userChoice isEqualToString:@"yes"])

完整的代码是:

void initGame (void);
void restartGame(void);
void toGoOn(char *playerChoice);


int guess=-1;
int from=-1;
int to=-1;
bool playStatus=true;
bool gameStatus=true;
int answer=-1;
NSString *userChoice[10];

//if true the game is on

int main (int argc, const char * argv[])
{

    @autoreleasepool {

        GuessManager *game=GUESS;  
        NSLog(@"Hello, lets play");
        NSLog(@"Please provide a positive range in which you would like to play");
      do{
          initGame();
          [game setnumberToGuess:from :to];
        do {                       
            printf("Make you guess:");
            scanf("%d", &guess);
            [game setUserGuess:guess];
            [game checkUserGuess];
            if([game getDidIgetIt])
            {
                playStatus=false;               
            } 
            else
            {
                playStatus=true;
            }

        } while (playStatus);
         restartGame();
      }while(gameStatus);  
        printf("Thanks For Playing PanGogi Games! GoodBye");
    }
    return 0;
}





void initGame (void)
{
    printf("from:");
    scanf("%d",&from);
    printf("to:");
    scanf("%d",&to);    
}

void restartGame(void)
{
    printf("Would you like to continue?(yes/no)");
    scanf("%s",&userChoice); 
    //scanf("%d",&answer); 

   // if(answer==1)
    if([*userChoice isEqualToString:@"yes"])
    {
        gameStatus=true;
    }
    else
    {
        gameStatus=false;
    }
}

据我所知,它与NSString变量userChoice及其使用方式有关 如果,但我无法找到的是我做错了什么。

请帮助:)

2 个答案:

答案 0 :(得分:1)

代码中有3个错误

1)我认为你对NSString和C风格的char数组感到困惑......你只需要使用单个NSString对象来保存多个字符数据。

NSString *userChoice;   

2)由于您想使用scanf输入数据,因此您需要一个C风格的字符数组。 scanf不适用于NSString类型。

char tempArray[10];
int count = scanf("%s",&tempArray);
userChoice  = [NSString stringWithBytes:tempArray length:count encoding: NSUTF8StringEncoding];

3)现在你可以直接使用NSString ..不需要像语法这样的指针

if( [userChoice isEqualToString: @"yes"]){
   .....
   .....
}

答案 1 :(得分:0)

您正在使用NSString,就好像它是char一样。不是。它是一个代表字符串的类。

scanf函数是一个C函数,需要一个char数组,而不是NSString

char str[80];
scanf("%s", &str);

您可以使用NSString数组初始化char对象,如下所示:

NSString *userChoice = [NSString stringWithCString:str encoding:NSASCIIEncoding];

并且比较如下:

if ([userChoice isEqualToString:@"yes"]) {
   ...
} else {
   ...
}