0

ppm イメージのバイトを読み込んで、構造体に含まれる柔軟なメンバー配列に格納したいと考えています。割り当てなどを台無しにしていないことを願っています。これが今の様子です:

typedef struct ppm {
    unsigned xsize;
    unsigned ysize;
    char data[];
} PPMImage;

int main(void)
{
    int c = 0;
    unsigned int rgb = 0;
    char arr[2];
    FILE *handle;
    PPMImage img;

    if((handle = fopen(filename, "rb")) == NULL)
        return 1;

    fscanf(handle, "%c%c", &arr[0], &arr[1]); // scanning width and height

    if(arr[0] != 'P' || arr[1] != '6')
        // error handling...

    c = getc(handle);
    while(c == '#') // getting rid of comments
    {
            while(getc(handle) != '\n');
            c = getc(handle);
    }
    ungetc(c, handle);
    if(fscanf(handle, "%u %u", &img.xsize, &img.ysize) != 2)
        // error handling...

    if(fscanf(handle, "%u", &rgb) != 1)
        // error handling...

    PPMImage *data = (PPMImage *)malloc(RANGE);

    if(fread(data, 3 * img.xsize, img.ysize, handle) != img.ysize)
        // error handling...

    for(int i = 0; i < RANGE; i++)
        printf("%c\n", data[i]); // ERROR POINT

    return 0;
}

データがどこに保存されるか、またはfreadの引数が正しいかどうかわからないと思います..何かアイデアはありますか? これは出力です:

warning: format ‘%c’ expects argument of type ‘int’, but argument 2 has type ‘PPMImage’ [-Wformat]
4

1 に答える 1

2

だから、PPMImage *data = (PPMImage *)malloc(RANGE);タイプ(構造体!)の新しいローカル変数を作成し、あなたが望むと思うものにPPMImageアクセスしていません...img.data

コメントの質問に答えるように編集します

struct ppmchar へのポインターを持つように変更します。

typedef struct ppm {
    unsigned xsize;
    unsigned ysize;
    char* data;
} PPMImage;

次に(R、G、Bのバイトマトリックスがあると仮定します):

img.data = malloc(3 * img.xsize * img.ysize);

// do error checking ...

その後

fread(img.data, 3 * img.xsize, img.ysize, handle)

// do error checking ...
于 2014-03-25T10:02:37.557 に答える