从C中的文件读取时出现Seg故障



我只是想用3个命令行参数运行这个程序:2个int和1个文件名。

我一直在用运行我的程序

a.out 1 2 devices.txt

.v.txt如下所示:

1

我的主要方法是这样的:

int main(int argc, char* argv[]){
int MaxIterations, T, numDevices;
FILE *devices;
printf("Num arguments: %d n", argc);
if(argc < 3 || argc > 4){
    printf("ERROR, need exactly 2 or 3 arguments!n");
    return 1;
} else if (argc == 3){
    MaxIterations = argv[1]; // max iterations allowed
    T = argv[2]; // time interval
    devices = fopen("devices.in", "r");
} else {

    MaxIterations = argv[1];
    T = argv[1];
    devices = fopen(argv[3], "r");
    if(devices == NULL){
        fprintf(stderr, "CANT OPEN FILE: %s!n", argv[3]);
        exit(1);
    }

}
FILE* file = fopen ("devices.txt", "r");
 int i = 0;
fscanf(devices, "%d", numDevices);
printf("Number of devices: %d n", numDevices);
fclose(devices);
return 0;

}

我做错了什么,这让我很生气?我添加了调试printf,以找出seg故障实际触发的位置,它看起来像是在:

fscanf(devices, "%d", numDevices);

启用编译器警告:

这是无效的:

fscanf(devices, "%d", numDevices);

这是你想要的:

fscanf(devices, "%d", &numDevices);

d转换说明符需要指向带符号整数的指针。您正在传递(未序列化的)对象numDevices的值。

问题是fscanf函数需要一个指向变量的指针,用于存储从文件中读取的值。你需要像这样的东西

fscanf(devices, "%d", &numDevices);

你得到segfault的原因是,在你的原始代码中,numDevices的(未初始化的)值被用作要写入的地址-由于它不太可能是有效的可写入地址,segfault是你的计算机说"不!"的常见方式:)

相关内容

  • 没有找到相关文章

最新更新