Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C-“;警告:格式为%";需要类型为“的参数”;char*”和“char”;,但论点3的类型为;int";:?_C_Pointers_Struct_Pixel_Ppm - Fatal编程技术网

C-“;警告:格式为%";需要类型为“的参数”;char*”和“char”;,但论点3的类型为;int";:?

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++) {

我正在编写代码,将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++)
    {
        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
等。