C 编程,将结构体中的 int 成员分配给整数时出现段错误

标签 c gcc struct segmentation-fault strtol

我在Linux环境中用ansi C编程,我使用gcc编译器。 我有以下代码

#define USER_IN_LEN 15
#define EXTRA_SPACES 2
#define DELIMS " ,\n"

//define the sruct
typedef struct position
{
    int x;
    int y;
} Position;


char choice[USER_IN_LEN + EXTRA_SPACES];
//define pointers for strtok and strtol
char *tok;
char *end;

//create pointer o type Position
Position *position;
//get user input with fgets
fgets(choice, USER_IN_LEN, stdin);

//tokenize
tok = strtok(choice, DELIMS);
tok = strtok(NULL, DELIMS);
position->x = (int)strtol(tok, &end, 0); //error, segmentation fault
tok = strtok(NULL, DELIMS);
position->y = (int)strtol(tok, &end, 0);//error, segmentation fault

基本上,程序获取用户输入的某些值并将它们存储在位置结构中,我在网上做了一些研究,发现我可以使用这个 position->y = int ,但为什么不是它不能在这里与 strtol 一起工作吗?我运行了调试器,但没有多大帮助

最佳答案

position 是指向结构的指针。您从未将 position 设置为任何值,因此它可能指向任何地方! - 即您正在调用未定义的行为。

快速修复:

Position instance;
position = &instance;

关于C 编程,将结构体中的 int 成员分配给整数时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36497514/

相关文章:

条件运算符在每个输入上给出的结果为 28?

将带有字符串数组作为参数的 glib C 方法转换为 Go

c++ - C 和 C++ 中的结构内部定义差异

ios - 如何将 Obj-C block 保存在 C 结构中?

c - 避免无限 while 循环

通过C获取BIOS信息的常用方法

c++ - 如何让 GCC 将 .text 部分编译为 ELF 二进制文件中的可写部分?

c - 为什么 char name[1] 可以容纳 1 个以上的字符?

c - 我怎样才能摆脱 QAC 警告?

struct - 初始化嵌套结构定义