繁体   English   中英

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

[英]Seg Fault while reading from a file in C

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

我一直在用以下程序运行我的程序:

a.out 1 2 devices.txt

devices.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);

出现段错误的原因是,在原始代码中,numDevices的值(未初始化)被用作要写入的地址-由于它不太可能是有效的可写地址,因此段错误通常是用于您的计算机说“不!” :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM