命令行参数问题

标签 c command line argv argc

目前程序正在读取“无法打开输入文件”,这意味着大小为 0。我用编辑器创建了输入文件,但我不确定问题是什么。我的代码有什么问题可能会导致这种情况吗?或者更有可能我只是搞乱了 input.txt 文件?

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

int load_data(char* filename, int *x, float *y)
{
    int i=0;

    FILE* file=fopen(filename,"r");


    if(file==NULL)
    {
            return 0;
    }

    int size;


    fscanf(file, "%d", &size);

    for(i=0;i<size;i++)
    {
            fscanf(file, "%d%f", &x, &y);
    }


    fclose(file);
    return size;
}


void print_data(int *acn, float *amt, int size)
{
    int i;
    int *p;

    for(i=0;i<size;i++)
    {
            printf("%-10d%-10f ", *(acn+i), *(amt+i));
    }
}

int main(int argc, char** argv)
{
    int size=0, *x;
    char *filename;
    float *y;

    if(argc!=3)
    {
            printf("\nInsufficient arguments.\n");
            return 0;
    }


    int n=atoi(argv[2]);

    int *acn;
    float *amt;


    int *fp=malloc(sizeof(int)*n);


    if(size==0)
    {
            printf("\nUnable to open the input file.\n");
            return 0;
    }
    load_data(filename, x, y);
    print_data(acn, amt, size);

    free(fp);
    return 0;
}

最佳答案

您的程序中有很多问题 -

  1. 您是来自公共(public)线路的文件名,但您没有将其存储在 char *filename; 中并在功能中 int load_data(char* filename, int *x, float *y) 你正在路过filename .但是filename没有name of file存储在其中。
  2. fscanf(file, "%d%f", &x, &y);当您在 fscanf 中传递指针时与 %d你不需要&运算符(operator)。这样就可以了-

    fscanf(file, "%d%f", x, y);
    
  3. 您需要使用 malloc 分配内存到 xy .

  4. size当您在函数和 main 中再次声明它时,这两个函数中的内容是不同的.这就是为什么size总是0int main .

  5. void print_data在此函数中,您正在打印 acn 的值和amt但两个指针都未初始化,并且您正在打印它,因此它将给出未定义的行为。

  6. 此外,您还有在程序中声明但未使用的指针。

关于命令行参数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31644518/

相关文章:

regex - Notepad++ : Cannot remove empty line

c++ - substr C++ 的多个元素

c - 函数调用是否与 %rax 以外的其他寄存器混淆?

wpf - 使用 ViewModel-first(绑定(bind))方法的奇怪竞争条件

c - 运行时 C 函数详细信息

redis - redis命令在redis集群环境中仍然是原子的吗?

c - main(int argc, char *argv[]) 对于 * 作为命令行参数给出奇怪的结果

java - 根据角度绕圆画一条线

c - 并行递归算法

c - 关于C语言中的内存