Objective c 目标C:为什么我会得到;EXC“坏访问”是什么;?
我对Objective C非常陌生,我正试图编写一个程序来处理collatz猜想。当我运行程序时,它在第一次扫描后停止,并出现“EXC_BAD_ACCESS”。这是我的密码:Objective c 目标C:为什么我会得到;EXC“坏访问”是什么;?,objective-c,exc-bad-access,Objective C,Exc Bad Access,我对Objective C非常陌生,我正试图编写一个程序来处理collatz猜想。当我运行程序时,它在第一次扫描后停止,并出现“EXC_BAD_ACCESS”。这是我的密码: int original,i; NSString *PrintFull; - (void)applicationDidFinishLaunching:(NSNotification *)aNotification { NSLog(@"Collatz Conjecture:"); NSLog(@"Prin
int original,i;
NSString *PrintFull;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSLog(@"Collatz Conjecture:");
NSLog(@"Print full results?");
scanf("%s",PrintFull);
NSLog(@"What number should we go up to?");
scanf("%d", &original);
while (original <= 100) {
NSLog(@"\n\n%d", original);
i = original;
while (i != 1) {
if (i % 2) {
i = (i*3)+1;
} else {
i = (i/2);
}
if ([PrintFull isEqualToString:@"yes"]) {
NSLog(@"%d",i);
}
}
original++;
}
}
int原件,i;
NSString*打印完整;
-(无效)ApplicationIDFinishLaunching:(NSNotification*)通知
{
NSLog(@“Collatz猜想:”);
NSLog(@“打印完整结果?”);
scanf(“%s”,打印完整);
NSLog(@“我们应该拨打什么号码?”);
scanf(“%d”和原件);
而(原始scanf不适用于对象类型,如NSString。请参阅SO post-。scanf不适用于对象类型,如NSString。请参阅SO post-。首先,您必须初始化并分配NSString
。其次,scanf无法处理NSString
还要注意,类名以大写字母开头,类实例以小写字母开头。首先,您必须初始化并分配NSString
。其次,scanf无法处理NSString
还要注意,类名以大写字母开头,类实例以小写字母开头。
scanf
格式字符串后的参数应指向已分配的对象。在这种情况下,您刚刚声明了一个指针,并在未设置的情况下将其传入。scanf
将尝试写入此位置,但由于指针包含垃圾值,应用程序崩溃
scanf
来自C库'stdio.h',这意味着它不知道来自Objective-C'Foundation'框架的NSString
下面应该解决这些问题
int original,i;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSLog(@"Collatz Conjecture:");
NSLog(@"Print full results?");
char inputBuffer[80];
scanf("%s", inputBuffer);
NSString *printFull = [NSString stringWithCString:inputBuffer encoding:NSUTF8Encoding];
scanf
格式字符串后的参数应指向已分配的对象。在这种情况下,您刚刚声明了一个指针,并在未设置的情况下将其传入。scanf
将尝试写入此位置,但由于指针包含垃圾值,应用程序崩溃
scanf
来自C库'stdio.h',这意味着它不知道来自Objective-C'Foundation'框架的NSString
下面应该解决这些问题
int original,i;
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSLog(@"Collatz Conjecture:");
NSLog(@"Print full results?");
char inputBuffer[80];
scanf("%s", inputBuffer);
NSString *printFull = [NSString stringWithCString:inputBuffer encoding:NSUTF8Encoding];
实际上,在这里输入超过80个字符仍然可能导致崩溃。使用scanf(“%80s”,inputBuffer);
可以防止这种情况。在这里输入超过80个字符仍然可能导致崩溃。使用scanf(“%80s”,inputBuffer);
可以防止这种情况。