[英]Objective C: Why am I getting “EXC_BAD_ACCESS”?
我真的是Objective C的新手,正在嘗試編寫一個程序來解決collatz猜想。 當我運行該程序時,它將在第一個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.