gpt4 book ai didi

C fread参数类型不匹配

转载 作者:太空宇宙 更新时间:2023-11-04 01:25:34 24 4
gpt4 key购买 nike

我试图通过将参数传递给 main 来将一些数字写入数组

./test numbers 100

在命令行上,但我在担心 argv[1] 的参数类型不匹配时遇到错误。 fread 中的第 4 个参数不是文件的名称。我不是从 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 文件有关。

最佳答案

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

size_t fread( void *buffer, size_t size, size_t count, FILE stream ); / (until C99) */
size_t fread( void *restrict buffer, size_t size, size_t count, FILE restrict stream ); / (since 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)。

关于C fread参数类型不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31691748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com