端子中带有C的分段故障11

端子中带有C的分段故障11,c,terminal,segmentation-fault,C,Terminal,Segmentation Fault,我正在用C编写一个简单的程序,第一次尝试自学这门语言,也第一次学习使用我的(Mac)终端。 然而,当我试图在scanf()中输入一个变量(ssn)以保存时,我不断得到一个分段错误。我将变量从int改为long,希望解决这个问题(我查了一下,认为这与内存可用性/访问有关),但没有成功。 我非常感谢您的指导,谢谢! 我的代码如下: /* A short example program from cs449 C Programming Text */ /* Section 4.13 */ /* Exe

我正在用C编写一个简单的程序,第一次尝试自学这门语言,也第一次学习使用我的(Mac)终端。 然而,当我试图在scanf()中输入一个变量(ssn)以保存时,我不断得到一个分段错误。我将变量从int改为long,希望解决这个问题(我查了一下,认为这与内存可用性/访问有关),但没有成功。 我非常感谢您的指导,谢谢! 我的代码如下:

/* A short example program from cs449 C Programming Text */
/* Section 4.13 */
/* Exercise 4-1 */

/**********************************************************
*                                                         *
*     Write a program to print a name, SSN, and DOB       *
*                                                         *
**********************************************************/

#include <stdio.h>
int main()
{
    char name[20];      /* an array of char used to hold a name */
    long ssn;           /* an integer for holding a 9 dig ssn */
    long dob;           /* an integer for holding a date of birth */

    /* for the name */
    printf("Please enter your name: ");
    scanf("%s", name);

    /* for the SSN */
    printf("Please enter your ssn: ");
    scanf("%ld", ssn);

    /* for the date of birth */
    printf("Please enter your date of birth:\n");
    printf("Ex. monthdayyear or 041293\n");
    scanf("%ld", dob);

    /* final print of user-entered information */
    printf("You are %s born on %d and your SSN is %d", name, dob, ssn); 

    /* remember to always return 0 at the end of a main funct! */
    return(0);
}
/*cs449 C编程文本中的一个简短示例程序*/
/*第4.13节*/
/*练习4-1*/
/**********************************************************
*                                                         *
*编写一个程序来打印名称、SSN和DOB*
*                                                         *
**********************************************************/
#包括
int main()
{
char name[20];/*用于保存名称的字符数组*/
long ssn;/*用于保存9位ssn的整数*/
long dob;/*用于保存出生日期的整数*/
/*为了名字*/
printf(“请输入您的姓名:”);
scanf(“%s”,名称);
/*对于SSN*/
printf(“请输入您的ssn:”;
扫描频率(“%ld”,ssn);
/*出生日期*/
printf(“请输入您的出生日期:\n”);
printf(“例如,月日或041293\n”);
扫描频率(“%ld”,dob);
/*用户输入信息的最终打印*/
printf(“您是%s出生于%d,您的SSN是%d”,姓名、出生日期、SSN);
/*记住在主函数的末尾总是返回0*/
返回(0);
}

您需要以下各项:

scanf("%ld", &ssn);
然后

scanf("%ld", &dob);
这是因为您希望
scanf
将数字读入变量,您希望通过此函数更改这些数字,因此您给它一个指向这些变量的指针


此外,您最好正确地输出数字,使用
%ld
而不是
%d

printf("You are %s born on %ld and your SSN is %ld", name, dob, ssn);

@蓝精灵谢谢你抓住了那个错误@BLUEPIXY,继续,把我的答案复制到评论中:-)@BLUEPIXY非常感谢@蓝精灵,我只是在开玩笑,伙计,因为你说的正是我在回答中所说的话,即使是按同样的顺序:)回过头来。您不能编辑使现有答案无效的问题!谢谢我是否也需要对字符串输入执行此操作?-->scanf(“%s”,名称)@她,不,你没有,
scanf
已经将
name
视为指向
name
@Her的第一个元素的指针:因为
name
声明为数组,
name
已经是指向数组开头的指针,所以你不需要
&
。数组在C语言中很有趣,并且以奇怪的方式与指针紧密联系在一起。@chrisddol:“因为…
name
已经是指向数组开头的指针了…”-不!大多数情况下(包括此处的用法),它都会衰减为这样的指针,但它是一个数组,而不是指针。@Olaf:它取决于上下文--在这个(和大多数)上下文中,其相应声明具有数组类型的标识符是指针。说它“衰变”只是证实了这个问题——不涉及额外的运行时开销或转换。