C fread参数类型不匹配

时间:2015-07-29 05:20:29

标签: c

我试图通过传递main参数

将一些数字写入数组
  

./ test number 100

在命令行上,但我在argv [1]的参数类型不匹配的fread中出错。不是fread中的第四个参数文件的名称。不是从argv [1](数字)得到的吗?

int main(int argc, char *argv[]) {
    for (int i=0; i<*argv[2]; ++i)
        fread(&array[i],sizeof(int),1,argv[1]);
}

编辑:修正了打印到终端的问题。它与make文件有关。

1 个答案:

答案 0 :(得分:4)

fread的第四个参数是文件描述符,不是文件名。

  

size_t fread(void * buffer,size_t size,size_t count,                 FILE stream); / (直到C99)* /
size_t fread(void * restrict buffer,size_t size,size_t count,                 FILE 限制流); / (自C99起)* /

使用以下内容:

FILE *fp = fopen(argv[1], "rb");  /* Open the file */

if(fp) for(int i=0; i<*argv[2]; ++i) {
  fread(&array[i],sizeof(int),1, fp);  /* Read */
}

if(fp) fclose(fp);  /* Close */

或者更有效的方法,一次读取所有整数,使用:

number_of_ints_read = fread(array, sizeof(int), atoi(argv[2]), fp);
/* array[0] to arrau[number_of_ints_read-1] are read */

预期参数类型为FILE *,但您传递char *,因此类型不匹配。

您可能还想重温条件i<*argv[2],您可能需要i < atoi(argv[2])或类似条件。 (您需要为stdlib.h

添加atoi

这将读取文件作为原始数据数据。如果您的文件包含文本格式的数字,则需要使用格式化的IO(例如fscanf)。