【问题标题】:C programming, segmentation fault when assigning int member in struct to integerC编程,将结构中的int成员分配给整数时出现分段错误
【发布时间】:2016-04-08 10:37:58
【问题描述】:

我在 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 是一个未初始化的指针。如果你想取消引用它,你必须让它指向某个有效的地方,可能是通过mallocing 内存。

标签: c gcc struct segmentation-fault strtol


【解决方案1】:

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

快速修复:

Position instance;
position = &instance;

【讨论】:

  • 这行得通,谢谢!我将如何打印出 x 和 y 值?我来自 Java 背景,并没有过多处理指针
  • 在 C 中打印的正常方式是 printf("%d, %d\n", position->x, position->y);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-08
  • 2016-05-01
  • 2021-07-23
  • 1970-01-01
  • 2019-09-10
  • 1970-01-01
  • 2016-08-03
相关资源
最近更新 更多