为啥我在字符串变量上得到“程序接收信号:”EXC_BAD_ACCESS“
Posted
技术标签:
【中文标题】为啥我在字符串变量上得到“程序接收信号:”EXC_BAD_ACCESS“【英文标题】:Why do i get "program received signal: "EXC_BAD_ACCESS" on NSString veriable为什么我在字符串变量上得到“程序接收信号:”EXC_BAD_ACCESS“ 【发布时间】:2012-10-16 10:06:49 【问题描述】:我最近刚开始学习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 及其在 如果,但我找不到是我做错了什么。
请帮忙:)
【问题讨论】:
if([userChoice isEqualToString:@"yes"]) 你在使用NSString
,就好像它是char
。
尝试 userChoice 而不是 *userChoice
仅仅删除*
是不够的。将scanf
与NSString
一起使用也是错误的。为什么要声明NSStrings
的C 数组?
【参考方案1】:
代码中有 3 个错误
1) 我认为您对 NSString 和 C 风格的字符数组感到困惑...您只需要使用单个 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"])
.....
.....
【讨论】:
我不能只比较两个字符。我的意思是将 userChoise 保留为 char 并在 scanf 中仅接收一个字符 (y/n) 并将其与 char y 或 n 进行比较。如何正确比较两个字符? 您可以只使用 C 字符变量,使用scanf
和 %c
.. 输入,然后像在 C 中一样进行比较,即 if(c == 'y')..
好的,我将 dikleration 更改为 char *userChoice;和比较:if(userChoice=="y") 当我运行它时它没有得到 y 等于 y。并且在我收到通知“字符串文字未指定”【参考方案2】:
您正在使用NSString
,就好像它是char
。它不是。这是一个代表字符串的类。
scanf
函数是 C 函数,需要一个 char 数组,而不是 NSString
。
char str[80];
scanf("%s", &str);
您可以像这样使用char
数组初始化NSString
对象:
NSString *userChoice = [NSString stringWithCString:str encoding:NSASCIIEncoding];
然后像这样比较:
if ([userChoice isEqualToString:@"yes"])
...
else
...
【讨论】:
以上是关于为啥我在字符串变量上得到“程序接收信号:”EXC_BAD_ACCESS“的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在使用 GCD 时收到错误 EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
为啥我在 IOS 上得到 Mapboxgl api 的空白页面?
为啥我在使用 Nginx 和 Gunicorn 的 Django 应用程序上得到 502 Bad Gateway?