【发布时间】:2022-01-06 17:11:23
【问题描述】:
我正在为员工数据库编写程序,并且正在编写添加员工的函数。在我最后提示扫描信息后,我遇到了总线错误。我很确定这与我的 scanf 语句有关,因为我有一个 print 语句,之后没有打印。为什么会出现这个错误?
有问题的提示是阅读职位名称。
void addEmployee(void)
{
char *name;
char gender;
int age;
char *title;
printf("Enter name: \n");
scanf(" %100s", name);
scanf("%*[^\n]%*c");
printf("Enter gender: \n");
scanf(" %1c", &gender);
scanf("%*[^\n]%*c");
printf("Enter age: \n");
scanf(" %d", &age);
scanf("%*[^\n]%*c");
printf("Enter job title: \n");
scanf(" %100s", title);
scanf("%*[^\n]%*c");
printf("Test");
printf("The employee you've entered is: %s %c %d %s \n", name, gender, age, title);
Employee newEmp = {*name, gender, age, *title};
if(employeeList[0] == NULL)
{
employeeList[0] = &newEmp;
nodeCount++;
}
}
【问题讨论】:
-
name和title指向多少内存?当scanf试图读入那些指针指向的内存时会发生什么? -
您必须为字符串分配存储空间。你有指向任何东西/垃圾的指针
-
name 甚至没有分配,你需要在 scanf 中使用之前对其进行 malloc/calloc
-
不是您的问题,而是:(1) 您不需要
" %100s"和" %d"中的前导空格。 (2) 鉴于您(正确地)使用" %1c"中的额外空间,您不需要那些scanf("%*[^\n]%*c");行;他们只是在混淆额外的噪音。 -
注意:当
stdin中的下一个字符是'\n'时,scanf("%*[^\n]%*c");没有任何用处。'\n'仍保留在stdin中。
标签: c error-handling scanf