簡體   English   中英

目標C:為什么會收到“ EXC_BAD_ACCESS”?

[英]Objective C: Why am I getting “EXC_BAD_ACCESS”?

我真的是Objective C的新手,正在嘗試編寫一個程序來解決collat​​z猜想。 當我運行該程序時,它將在第一個scanf之后停止,並顯示“ 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++;
    }
}

我在這里做錯了什么?

scanf不適用於對象類型,例如NSString。 請參見SO- 使用scanf與NSStrings一起使用

  • 格式字符串后的scanf的參數應指向已分配的對象。 在這種情況下,您只需要聲明一個指針並將其傳遞而無需設置即可。 scanf將嘗試寫入此位置,但是由於指針包含垃圾值,因此應用程序崩潰。

  • scanf來自C庫'stdio.h',這意味着它不了解來自Object-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];

首先,您必須初始化並分配NSString 其次,scanf無法處理NSString

還要注意,類名以大寫字母開頭,類實例以小寫字母開頭。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM