c-打开文件时出现分段故障



因此,我试图打开两个文件,每个文件都有三行和两个数字。编译后,我在终端中运行它(我使用的是Ubuntu ftr(作为

./a.out a.txt+b.txt

它什么也不回。当我注释掉代码中的"检查它是否正确打开"部分时,它只会吐出一些数字,并打印出一个错误"Segmentation fault(core dumped("。我真的不知道我做错了什么,因为这段代码对我的朋友来说运行得很好。我在下面提供了令人反感的代码。(代码的其余部分应该对数字进行运算,这就是为什么文件名之间有一个加号的原因。(

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int main(int argc, char** argv){
FILE* fa = fopen(argv[1],"r"); if(!fa)exit(1);
FILE* fb = fopen(argv[3],"r"); if(!fb)exit(1); 
int k;
double A[3];
double Ag[3];
double B[3];
double Bg[3];
for (k=0;k<3;k++){
fscanf(fa, "%lf %lf", &A[k], &Ag[k]);
fscanf(fa, "%lf %lf", &B[k], &Bg[k]);
}
for (k=0;k<3;k++){
printf("%lf %lfn", A[k], Ag[k]);
printf("%lf %lfn", B[k], Bg[k]);
}
fclose(fa);
fclose(fb);
return 0;}

(除了其他答案:(这部分代码,

for (k=0;k<3;k++){
fscanf(fa, "%lf %lf", &A[k], &Ag[k]);
fscanf(fa, "%lf %lf", &B[k], &Bg[k]);
}

尝试从CCD_ 1读取六次。大概你是想读fb的第二行。

使用./a.out a.txt+b.txt,您将传递两个参数(即可执行文件名./a.outa.txt+b.txt,而不是三个。因此,当您访问FILE* fb = fopen(argv[3],...时,您会超出argv的界限,并产生未定义的行为。

访问argv之前始终检查argc,并继续检查NULL值:

if (argc < 3) {
printf("wrong number of arguments.");
exit(1);
}
FILE* fa = fopen(argv[1],"r"); if(!fa)exit(1);
FILE* fb = fopen(argv[2],"r"); if(!fb)exit(1);

然后,为了传递两个文件名,将其称为

./a.out a.txt b.txt

相关内容

  • 没有找到相关文章

最新更新