アプリ版:「スタンプのみでお礼する」機能のリリースについて

『ppm形式の画像の読み込み』のプログラムを実行したのですが、
エラーがでてうまくいきません。
どこを修正しなければいけないのか、教えてください。

エラーの内容↓
function 'main':
main.c:17: 警告: passing argument 1 of 'fopen' makes pointer from integer without a cast
main.c: In function 'headerScan':
main.c:35: 警告: ポインタと整数との比較を行なっています
main.c:36: 警告: ポインタと整数との比較を行なっています
main.c:37: 警告: ポインタと整数との比較を行なっています
main.c: In function 'dataScan':
main.c:44: 警告: ポインタと整数との比較を行なっています

プログラム↓
#include <stdio.h>
#include <stdlib.h>


struct image{
int type;
int width;
int height;
int depth;
char *data;
};


int main(int argc, char *argv){

FILE *fpin;
fpin = fopen("argv[1]", "rb");

struct image *img;

headerScan(fpin, img);
img->data = (char *)malloc(sizeof(char)*img->width*img->height*3);
dataScan(fpin, img);


free(img->data);
fclose(fpin);

return 0;
}


int headerScan(FILE *fp, struct image *img){

while(fscanf(fp, "P%d", &(img->type)) == NULL);
while(fscanf(fp, "%d %d", &(img->width), &(img->height)) == NULL);
while(fscanf(fp, "%d", &(img->depth)) == NULL);
return 0;
}

int dataScan(FILE *fp, struct image *img){

int i = 0;
while(fscanf(fp, "%c%c%c", &(img->data[i++]), &(img->data[i++]), &(img->data[i++])) != NULL);
return 0;
}

A 回答 (1件)

>『ppm形式の画像の読み込み』のプログラムを実行したのですが、


>エラーがでてうまくいきません。
「実行」までいってない。

>どこを修正しなければいけないのか、教えてください。
エラーの内容のとおりだけど?
まず、関数のリファレンスを読み直すことと、エラーの意味を理解することから始めるべき。

>main.c:17: 警告: passing argument 1 of 'fopen' makes pointer from integer without a cast
fopen()の使い方が問題。
関数に渡す引数の内容が違う。

>main.c:35: 警告: ポインタと整数との比較を行なっています
>main.c:36: 警告: ポインタと整数との比較を行なっています
>main.c:37: 警告: ポインタと整数との比較を行なっています
>main.c:44: 警告: ポインタと整数との比較を行なっています
fscanf()の戻り値はint型。戻る値は項目数(0もありえる)かEOF。
NULL比較はできない。

>main.c: In function 'dataScan':
プロトタイプ宣言されていないから、main()より下に書かれている関数が認識されていない。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!