我试图在新安装的Debian系统中编写一个C程序。程序在scanf()功能处因分段错误而停止。
这是简化代码:

int main() {
  int x = 0;
  printf("$ ");
  scanf("%i", x);

  return 0;
}

当我使用gdb运行此命令时,会收到以下消息:
(gdb) run
Starting program: /home/siery/dev/shell/classes/bin/Recure

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff71f6794 in _IO_vfscanf_internal (s=<optimized out>, format=<optimized out>, argptr=argptr@entry=0x7fffffffe608, errp=errp@entry=0x0) at vfscanf.c:1902
1902    vfscanf.c: No such file or directory.

使用stdio.h库并使用printf()和少量其他功能,效果很好。我试图在互联网上搜索vfscanf.c,但没有找到多少有用的信息。
顺便说一下,我用g++编译这个程序,这个程序和gdb一样是新更新的。

最佳答案

scanf("%i", &x);
//          ^ THIS IS THE IMPORTANT BIT

海合会甚至告诉你:
foo.c: In function ‘main’:
foo.c:6:9: warning: format ‘%i’ expects argument of type ‘int *’, but argument 2 has type ‘int’ [-Wformat=]
   scanf("%i", x);
         ^

vfscanf.c: No such file or directory只是gdb抱怨它找不到scanf的源代码。

09-27 05:24