我试图通过传递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文件有关。
答案 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
)。