我正在编写代码来将PPM文件读入包含3个无符号字符r,g和b的struct pixel_type数组中。导致问题的代码如下所示:
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);
}
}
编译时,我收到所有3“%c”的消息:
警告:
format â%câ expects argument of type âchar *â, but argument (3,4, or 5) has type âintâ [-Wformat]
将像素值读入struct pixel_type数组的最佳方法是什么?
struct pixel_type
{
unsigned char r;
unsigned char g;
unsigned char b;
};
答案 0 :(得分:1)
您只需要一个临时指针,而不是整个数组。
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); */
}
}
}
答案 1 :(得分:0)
您不需要声明指向数组*pPtr[width][height]
的指针,因为pArray[width][height]
已经是一个数组而且:
pArray[0][0];
相当于:
*pArray;
以同样的方式:
&pArray[0][0];
等同于:
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));
}
}
答案 2 :(得分:0)
将指针pPtr[width][height]
的2D数组更改为指针pPtr
将解决您的问题。