C-“;警告:格式为%";需要类型为“的参数”;char*”和“char”;,但论点3的类型为;int";:?
我正在编写代码,将PPM文件读入包含3个无符号字符r、g和b的struct pixel_类型数组。导致问题的代码如下所示:C-“;警告:格式为%";需要类型为“的参数”;char*”和“char”;,但论点3的类型为;int";:?,c,pointers,struct,pixel,ppm,C,Pointers,Struct,Pixel,Ppm,我正在编写代码,将PPM文件读入包含3个无符号字符r、g和b的struct pixel_类型数组。导致问题的代码如下所示: struct pixel_type pArray[width][height], *pPtr[width][height]; pPtr[width][height] = &pArray[width][height]; for(h = 0; h < height; h++) { for(w = 0; w < width; w++) {
struct pixel_type pArray[width][height], *pPtr[width][height];
pPtr[width][height] = &pArray[width][height];
for(h = 0; h < height; h++)
{
for(w = 0; w < width; w++)
{
fscanf(in, "%c%c%c", pPtr[w][h]->r, pPtr[w][h]->g, pPtr[w][h]->b);
}
}
将像素值读入struct pixel_类型数组的最佳方式是什么
struct pixel_type
{
unsigned char r;
unsigned char g;
unsigned char b;
};
您不需要声明指向数组的指针
*pPtr[width][height]
,因为pArray[width][height]
已经是一个数组,并且:
pArray[0][0];
相当于:
*pArray;
pArray;
以同样的方式:
&pArray[0][0];
相当于:
*pArray;
pArray;
因此,在指针或数组被延迟之后,只需指向数据所在的地址(在结构内部)
struct pixel_type pArray[width][height];
for(h = 0; h < height; h++)
{
for(w = 0; w < width; w++)
{
fscanf(in, "%c%c%c", &(pArray[w][h].r), &(pArray[w][h].g), &(pArray[w][h].b));
}
}
struct pixel_type阵列[宽度][高度];
对于(h=0;h<高度;h++)
{
对于(w=0;w您不需要声明指向数组的指针*pPtr[width][height]
,因为pArray[width][height]
已经是一个数组,并且:
pArray[0][0];
相当于:
*pArray;
pArray;
以同样的方式:
&pArray[0][0];
相当于:
*pArray;
pArray;
因此,在指针或数组被延迟之后,只需指向数据所在的地址(在结构内部)
struct pixel_type pArray[width][height];
for(h = 0; h < height; h++)
{
for(w = 0; w < width; w++)
{
fscanf(in, "%c%c%c", &(pArray[w][h].r), &(pArray[w][h].g), &(pArray[w][h].b));
}
}
struct pixel_type阵列[宽度][高度];
对于(h=0;h<高度;h++)
{
对于(w=0;w
您只需要一个临时指针,而不需要它们的整个数组
struct pixel_type {
unsigned char r;
unsigned char g;
unsigned char b;
};
main()
{
struct pixel_type pArray[10][10], *pPtr;
int height = 10, width = 10, h, w;
char buf[32];
/* testing */
strcpy(buf, "abc");
for(h = 0; h < height; h++) {
for (w = 0; w < width; w++) {
pPtr = &pArray[width][height];
/* testing */
sscanf(buf, "%c%c%c", &pPtr->r, &pPtr->g, &pPtr->b);
/* fscanf(in, "%c%c%c", &pPtr->r, &pPtr->g, &pPtr->b); */
}
}
}
struct pixel\u类型{
无符号字符r;
无符号字符g;
无符号字符b;
};
main()
{
结构像素_型阵列[10][10],*pPtr;
内部高度=10,宽度=10,高,宽;
char-buf[32];
/*测试*/
strcpy(buf,“abc”);
对于(h=0;h<高度;h++){
对于(w=0;wr、&pPtr->g、&pPtr->b);
/*fscanf(在“%c%c%c”中,&pPtr->r,&pPtr->g,&pPtr->b)*/
}
}
}
您只需要一个临时指针,而不需要它们的整个数组
struct pixel_type {
unsigned char r;
unsigned char g;
unsigned char b;
};
main()
{
struct pixel_type pArray[10][10], *pPtr;
int height = 10, width = 10, h, w;
char buf[32];
/* testing */
strcpy(buf, "abc");
for(h = 0; h < height; h++) {
for (w = 0; w < width; w++) {
pPtr = &pArray[width][height];
/* testing */
sscanf(buf, "%c%c%c", &pPtr->r, &pPtr->g, &pPtr->b);
/* fscanf(in, "%c%c%c", &pPtr->r, &pPtr->g, &pPtr->b); */
}
}
}
struct pixel\u类型{
无符号字符r;
无符号字符g;
无符号字符b;
};
main()
{
结构像素_型阵列[10][10],*pPtr;
内部高度=10,宽度=10,高,宽;
char-buf[32];
/*测试*/
strcpy(buf,“abc”);
对于(h=0;h<高度;h++){
对于(w=0;wr、&pPtr->g、&pPtr->b);
/*fscanf(在“%c%c%c”中,&pPtr->r,&pPtr->g,&pPtr->b)*/
}
}
}
将二维指针数组pPtr[width][height]
更改为指针pPtr
将解决您的问题 将二维指针数组pPtr[width][height]
更改为指针pPtr
将解决您的问题 @Kaz如果你愿意,我可以添加更多的代码。我不是要求任何人为我编码,我只是需要知道获取每个像素值(我相信p6ppm像素值以二进制形式存储)并将其转换为三个字符(r、g、b)的最佳方法。然后我可以用这些信息来写一个不同的PPM文件。@HighCore你说得对,对不起。我现在有点想改变它。下次@user2993631????这个评论应该是针对另一个人提出的完全不同的问题,在这里不适用。那是怎么发生的。。。我很确定我打字时的问题是对的。对不起@如果你愿意,我可以添加更多的代码。我不是要求任何人为我编码,我只是需要知道获取每个像素值(我相信p6ppm像素值以二进制形式存储)并将其转换为三个字符(r、g、b)的最佳方法。然后我可以用这些信息来写一个不同的PPM文件。@HighCore你说得对,对不起。我现在有点想改变它。下次@user2993631????这个评论应该是针对另一个人提出的完全不同的问题,在这里不适用。那是怎么发生的。。。我很确定我打字时的问题是对的。对不起!谢谢,我想这就解决了。我的代表级别太低,无法“投票”,但我很感激。你根本不需要任何临时指标。只需使用&pArray[width][height].r
等。谢谢,我想这可以解决问题。我的代表级别太低,无法“投票”,但我很感激。你根本不需要任何临时指标。只需使用&pArray[width][height].r
等。