c - “总线错误”和“分段错误”,包含 C 中的结构的最少代码
问题描述
我写了一个最小的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(结构的 instatioation)时,它工作正常。任何解释都会被应用。
解决方案
tmp
是一个不指向任何地方的指针。它是未初始化的,意味着它的值是不确定的。因此,当您将此指针传递给 时scanf
,它会尝试取消引用此无效指针。这会调用未定义的行为,在您的情况下会导致程序崩溃。
更改tmp
为一个足够大的数组来保存您想要的值,并确保以您的scanf
格式指定最大字段大小:
char tmp[50];
scanf("%49s", tmp);
推荐阅读
- java - Maven非标准版本控制意外的最新版本结果
- python - CuDNNLSTM(而不是 LSTM)层的意外结果
- javascript - 按下按钮时发射烟花
- stored-procedures - 调用 SP 抛出“ABAP 对象和 DDIC 对象必须在 METHOD 语句中声明”
- automation - 如何在 botium 中使用我的自定义输入法?
- php - 为什么我收到数据类型不匹配错误?
- node.js - ReferenceError:未定义名称
- spring - 如何修复连接到 localhost:5432 在 CentOS 7 上安装的 postgres 中被拒绝?
- javascript - 使用属性键中的特殊字符解析 JSON 对象
- c - 致命错误:无法执行'as':execvp:没有这样的文件或目录