Ошибка EXC_BAD_ACCESS, вопрос Objective-C - PullRequest
0 голосов
/ 10 ноября 2010

Эй, я новичок в Objective-C, а также вообще программирую на Какао ... в любом случае мой код выглядит так:Я просто делаю адресную книгу.Когда я ввожу имя, оно выдает ошибку «EXC_BAD_ACCESS».Почему?

#import "book.h"


@implementation book

-(void) setName: (char*) nameInput{
name = nameInput;

 }

-(void) setAddress: (char*) addressInput{
address = addressInput;

}

-(void) setPhoneNumber: (char*) phoneNumberInput{
phoneNumber = phoneNumberInput;
}

-(void) setBirthday: (char*) birthdayInput{
birthday = birthdayInput;
}

-(void) print{
printf("Name: %s\n", name);
printf("Address: %s\n", address);
printf("Phone Number: %s\n", phoneNumber);
printf("Birthday: %s\n", birthday);
 }

@end

РЕДАКТИРОВАТЬ: я больше не получаю ошибку .. но теперь у меня есть новая проблема.Он запрашивает ввод имени, а затем мгновенно запрашивает ввод адреса, прежде чем я смогу что-либо сделать.Почему это может происходить?

Ответы [ 2 ]

5 голосов
/ 10 ноября 2010

«inputtring» - это просто символ * - он не назначен и с ним не связано хранилище.

Вы должны передать ему указатель на массив достаточного размера, использовать модификатор "a" и передать указатель на указатель на символ для scanf для выделения для вас.

См. Справочную страницу на scanf http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/scanf.3.html

0 голосов
/ 11 ноября 2010

Хорошей идеей является использование fgets() вместо scanf().Любые пробелы (пробелы, символы табуляции, переводы строки и т. Д.) Приведут к тому, что scanf() прекратит синтаксический анализ, что, основываясь на вводе, который вы пытаетесь получить, вероятно, не то, что вы хотите.это:

char lineBuffer[100]; // or some number large enough

puts("Enter something:");
if (fgets(lineBuffer, sizeof lineBuffer, stdin))
{
    // lineBuffer contains the input, but it also contains the '\n' at the end.
    doSomething(lineBuffer);
    // etc. etc.
}
...