"bus error"并使用包含 C 语言结构的最小代码进行"Segmentation fault"



我写了一个最小的C代码,如下所示:

#include <stdio.h>
struct Books {
char  title[50];
char  author[50];
char  subject[100];
int   book_id;
};
int main() {
struct Books Book1;
char *tmp;
int counter=0;
scanf("%s", tmp);
return 0;
}

当我编译并运行上述代码时,在提供输入后,我会得到以下错误:

❯ gcc main.c
❯ ./a.out
e
[1]    86266 bus error  ./a.out
❯ vim main.c
$

我得到了一个";分段故障";当我把上面的代码放在函数中时。

我不知道这个代码出了什么问题。当我注释掉第一行main(结构的安装(时,它工作得很好。如有任何解释,请告知。

tmp是一个不指向任何位置的指针。它是未初始化的,这意味着它的值是不确定的。因此,当您将此指针传递给scanf时,它会尝试取消引用此无效指针。这会调用未定义的行为,在您的情况下会导致程序崩溃。

tmp更改为一个足够大的数组,以容纳所需的值,并确保以scanf格式指定最大字段大小:

char tmp[50];
scanf("%49s", tmp);

最新更新