C如何从命令行参数读取文件

时间:2016-02-26 06:05:03

标签: c file command-line-arguments

我的目标是读取一个txt文件(small_ramp.txt),然后输入除第一个数字之外的所有数字到一个数组。文件上有11行数字,第一行数字10表示数字有多少在文件中然后是以下10个数字(1-10)Small_ramp.txt。在命令提示符下,我输入Stats.exe<执行此命令时,small_ramp.txt我Error收到此错误消息。

#include <stdio.h> 
#include <stdlib.h>

int main(int argc, char* argv[])
{
    int n, i;
    FILE* fpointer;
    double *arr;

    fpointer = fopen(argv[1], "r");

    if (argc != 2) {
        printf("ERROR: you must specify file name!\n");
        return 1;
    }

    if (!fpointer) {
        perror("File open error!\n");
        return 1;
    }

    fscanf(fpointer, "%d", n);// Scan first line of small_ramp.txt to find array size
    arr = (double*)malloc(sizeof(double) * n);// allocate memory for array with the size given (n)

    while (!feof(fpointer)) {
        fscanf(fpointer, "%lf", arr + 1);
    }

    for (int i = 0; i < n; ++i)
    {
        printf("%lf,", arr[i]);
    }

    fclose(fpointer);
    return 0;
}

我想我的问题是我是否正确阅读了文件,如果是这样,有人会指出我正确的方向来修复此错误吗?

1 个答案:

答案 0 :(得分:1)

  • 您必须使用argv[1]检查之前的参数数量
  • 将具有错误类型的数据传递给fscanf()会调用未定义的行为。使用fscanf(fpointer, "%d", &n);代替fscanf(fpointer, "%d", n);
  • 您只能将数据读取到arr[1]。因此,arr[0]具有不确定的值,并使用该值调用未定义的行为
  • 应使用
  • %f代替%lf通过double打印printf()值。

注意:他们说you shouldn't cast the result of malloc() in C