gpt4 book ai didi

c- 格式 "%d"需要类型为 'int *' 的参数,但参数 3 的类型为 int

转载 作者:行者123 更新时间:2023-11-30 18:36:44 25 4
gpt4 key购买 nike

我是 C 编程新手,我需要从两个 .dat 文件获取图像并比较它们是否相等。文件首先包含图像数量,然后是一些图像。如果所有图像都相同,我需要返回 1。

其中一个 .dat 文件的图片:

F1.dat

前 20 表示 20 个“组”图像。那么 3 4 就意味着 3x4 矩阵,其余的就是矩阵。其他19个矩阵也是如此。

我需要将第一个文件的第一个矩阵与另一个文件中的第一个矩阵进行比较,依此类推。

这是我写的代码:

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

struct irudia{
int w,h;
unsigned char im[16][16];
};

int berdinak (struct irudia *im1, struct irudia *im2){
int berdin = 1;
if ((im1->w != im2->w) || (im1->h != im2->h)){
return 0;
}
for (int i = 0; i < im1 -> h; i++){
for (int j = 0; j < im1 -> w; j++){
if (im1->im[i][j] != im2->im[i][j]){
berdin = 0;
}
}
}
return berdin;
}

int main (int argc, char *argv[]){
int n1, n2;
int berdin = 1;
struct irudia i1, i2;
if (argc != 3){
printf("Errorea parametroetan. Programa amaitu da.\n");
exit(-1);
}
FILE *fitx1 = fopen(argv[1], "r");
FILE *fitx2 = fopen(argv[2], "r");
fscanf(fitx1, "%d", &n1);
fscanf(fitx2, "%d", &n2);
if (n1 != n2){
return 0;
}
struct irudia *p1 = &i1;
struct irudia *p2 = &i2;
while (!feof(fitx1) && berdin == 1){
fscanf (fitx1, "%d", &i1.h);
fscanf (fitx1, "%d", &i1.w);
fscanf (fitx2, "%d", &i2.h);
fscanf (fitx2, "%d", &i2.w);
for (int i = 0; i < i1.h; i++){
for (int j = 0; j < i1.w; j++){
fscanf (fitx1, "%d", (unsigned char)(i1.im[i][j]));
}
}
for (int i = 0; i < i2.h; i++){
for (int j = 0; j < i2.w; j++){
fscanf (fitx2, "%d", (unsigned char)(i2.im[i][j]));
}
}
berdin = berdinak (p1, p2);
}
fclose (fitx1);
fclose (fitx2);
return berdin;
}

我不需要你理解代码或类似的东西。我需要知道为什么我这样做时会收到警告

fscanf (fitx1, "%d", (unsigned char)(i1.im[i][j]));

最佳答案

fscanf 将值读取到提供的地址中。警告是你的 friend 。您收到该特定警告是因为编译器告诉您它将把 i1.im[i][j] 的值解释为地址并尝试取消引用它以放入扫描的值里面。可能的结果是段错误。

尝试:

fscanf (fitx1, "%hhu", &(i1.im[i][j]));

关于c- 格式 "%d"需要类型为 'int *' 的参数,但参数 3 的类型为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40312434/

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