2013-11-14 64 views
1

我正在编写代码以将PPM文件读入包含3个无符号字符的struct pixel_type数组R,G和b引起的问题的代码如下所示:C - “警告:格式”%c“需要类型为”char *“的参数,但参数3的类型为”int“:?

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” S:

警告:

format â%câ expects argument of type âchar *â, but argument (3,4, or 5) has type âintâ [-Wformat] 

什么是最好的方式来读取像素值int o struct pixel_type数组?

struct pixel_type 
{ 
    unsigned char r; 
    unsigned char g; 
    unsigned char b; 
}; 
+0

@Kaz我可以添加更多我的代码,如果你想。我不是要求任何人为我编码,我只需要知道获取每个像素值(我相信P6 PPM像素值以二进制存储)的最佳方式并将它们转换为三个字符(r,g,b) 。然后我可以使用这个信息来写一个不同的PPM文件。 – user2993631

+0

@HighCore你说得对,对不起。我有点想现在改变它。下次。 – user2993631

+0

@ user2993631 ????该评论应该是针对别人的完全不同的问题,并不适用于此。这是怎么发生的......当我输入它时,我确信我的问题是正确的。对于那个很抱歉! – Kaz

回答

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); */ 
     } 
    } 
} 
+0

谢谢,我认为这解决了它。我的代表太低而无法“投票”,但我很感激。 – user2993631

+0

根本不需要任何临时指针。只需使用&&pArray [width] [height] .r'等。 –

0

你并不需要一个指针来声明数组*pPtr[width][height],因为pArray[width][height]已经是一个数组,这样的:

pArray[0][0]; 

是相同的:

*pArray; 

在与此相同的方式:

&pArray[0][0]; 

等效于此:

pArray; 

所以你只需要指向的数据所在的位置(内部结构)的地址,指针后或阵列已经deferenced。

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)); 
    } 
} 
0

更改指针pPtr[width][height]的你的2D阵列的指针pPtr将解决问题。

相关问题