1

我正在编写代码以将 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;
};
4

3 回答 3

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); */
        }
    }
}
于 2013-11-14T20:08:19.070 回答
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));
    }
}
于 2013-11-14T19:53:23.890 回答
0

将您的二维指针数组更改pPtr[width][height]为指针pPtr将解决您的问题。

于 2013-11-14T20:12:53.877 回答