我有下面的代码,我尝试使用 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 *
的少数情况之一。