我正在尝试用fscanf读取输入文件中的3个双打,但是在尝试这样做时我遇到了段错误。我的代码如下:
FILE * infile = fopen(argv[1], "r");
double r_d, r, c;
fscanf(infile, "%le %le %le", r_d, r, c);
fclose(infile);
输入文件如下所示:
1.000000e+00 1.000000e+00 1.000000e+00
知道我哪里错了吗?我确信数据类型应该被理解为%le。
scanf
函数需要指向要使用值填充的对象的指针,因此:
fscanf(infile, "%le %le %le", &r_d, &r, &c);
// ^ ^ ^
会是一个更好的开始。如果没有address-of运算符,它很可能会使用变量的当前值(如果它们看起来是静态存储持续时间,将是任意的)作为写入值的指针。这不太可能结束:-)
我认为一个体面的编译器应该至少警告过你,参数的类型并不像预期的那样。如果确实如此,你应该养成不忽视这种警告的习惯。