简体   繁体   中英

reading data from a file into an array error in C

I am trying to read from a file specified in a command prompt through terminal using the line program < file.txt and then print it again to check it works. I get the error Segmentation fault: 11 , I'm not sure if my file is opening correctly in my program.

This is the code so far:

#define MAX 1000
int
main(int argc, char *argv[]) {
    FILE *fp;
    double values[MAX];

    fp = fopen(argv[1], "r");
    fscanf(fp, "%lf", values);
    printf("%f\n", *values);
    fclose(fp);

    return 0;
}

Any help or feedback would be greatly appreciated.

您应该像这样执行程序

./program  file.txt

I'm not sure if my file is opening correctly in my program

Then you should really test for it, you are getting a segfault because fopen is returning NULL .

#include <stdio.h>

#define MAX 1000
int
main(int argc, char *argv[]) {
    FILE *fp;
    double values[MAX];

    fp = fopen(argv[1], "r");
    if (!fp) {
        printf("Invalid file name \n");
        return -1;
    }

    fscanf(fp, "%lf", values);
    printf("%f\n", *values);
    fclose(fp);

    return 0;
}

fopen is NULL because you are invoking the program in the wrong manner, < and > are a re-directions which can be useful but is not what you are trying to do in this case, correct way to invoke it is to simply pass it the arguments directly.

./program input.file

Yeah, either: 1) check the way you're invoking it, ie,

  • check if the 'program' is an executable file, you can make it executable using chmod command in linux
  • check if the path to 'program' or 'file.txt' is correct

2) (I'm not sure of this): check if the content of 'file.txt' is of the right content. (I don't think it should affect to the extent that it causes a segmentation fault, but still, check it.)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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