C语言 使用 sscanf 将值分配给 int 指针后,指针会在 printf 中触发分段错误



我有下面的代码,我尝试使用 sscanf 为 int 指针赋值,通常很简单。 但是,当我分配它并尝试运行以下代码时,它首先打印从输入中获得的任何数字,然后在要求打印实际指针时触发 seg 错误。 当指针不为空时,为什么会发生这种情况?

int *key = (int *)malloc(sizeof(int));
if (key == NULL) {
  fprintf(stderr, "could not allocate memory for keyn");
  exit(2);
}
sscanf(line, "%i", key);
printf("key: %in", *key);
printf("key: %lsn", key);

输出如下所示:

钥匙:1234

分段故障(核心转储(

%ls格式说明符用于打印长字符字符串,而不是指针。 由于key指向一个int而不是一个以空终止的wchar_t数组,因此您调用了未定义的行为,在这种情况下表现为崩溃。

要打印指针的值,请使用 %p

printf("key: %pn", (void *)key);

请注意,这是需要强制转换到void *的少数情况之一。

相关内容

  • 没有找到相关文章

最新更新