我是C的新手,我正在尝试学习使用结构,我的unix应用程序将不会运行并说EXC_BAD_ACCES.救命!

Sid*_*non 2 c xcode struct typedef exc-bad-access

这是代码:

#include <stdio.h>
Run Code Online (Sandbox Code Playgroud)

int main(int argc,const char*argv []){int num; 结构接触;

struct contact {
    double foneNumber;
    char firstName;
    char lastName;
    };
typedef struct contact cntct;

cntct bob;

bob.foneNumber = 15555555555;
bob.firstName = "bob";
bob.lastName = "builder";


cntct fudge;

fudge.foneNumber = 15444444444;
fudge.firstName = "fudge";
fudge.lastName = "cornelius";

cntct Siddhartha;


Siddhartha.foneNumber = 15333333333;
Siddhartha.firstName = "Siddhartha";
Siddhartha.lastName = "Gautama";

while (1) {
printf("Would you like to see contact 1, 2, or 3 (0 to quit)?");
    scanf("%d", &num);
    switch (num)
    {
        case 1:
            printf("Phone Number:  %lg", bob.foneNumber);
            printf("\nFirst Name:  %s", bob.firstName);
            printf("\nLast Name:  %s", bob.lastName);
            break;
        case 2:
            printf("Phone Number:  %lg", fudge.foneNumber);
            printf("\nFirst Name:  %s", fudge.firstName);
            printf("\nLast Name:  %s", fudge.lastName);
            break;
        case 3:
            printf("Phone Number:  %lg", Siddhartha.foneNumber);
            printf("\nFirst Name:  %s", Siddhartha.firstName);
            printf("\nLast Name:  %s", Siddhartha.lastName);
            break;
        case 0:
            return 0;
            break;
        default:
            printf("huh?");
            return 0;
    }



}
Run Code Online (Sandbox Code Playgroud)

}

MBy*_*ByD 5

在你的结构中你应该使用char指针来保存字符串的地址,而不是字符:

struct contact {
    double foneNumber;
    char * firstName;
    char * lastName;
    };
Run Code Online (Sandbox Code Playgroud)

否则,当你调用printf%s,它期望参数是addresschar,但它得到一些值(这是char的值),这在大多数情况下是无效的地址.