Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:为什么我会得到;EXC“坏访问”是什么;?_Objective C_Exc Bad Access - Fatal编程技术网

Objective c 目标C:为什么我会得到;EXC“坏访问”是什么;?

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

我对Objective C非常陌生,我正试图编写一个程序来处理collatz猜想。当我运行程序时,它在第一次扫描后停止,并出现“EXC_BAD_ACCESS”。这是我的密码:

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);
可以防止这种情况。