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)
}
在你的结构中你应该使用char指针来保存字符串的地址,而不是字符:
struct contact {
double foneNumber;
char * firstName;
char * lastName;
};
Run Code Online (Sandbox Code Playgroud)
否则,当你调用printf时%s,它期望参数是addresschar,但它得到一些值(这是char的值),这在大多数情况下是无效的地址.