たくさんのjpegを含む大きなファイルがあります。すべてのjpegを1つずつ抽出する必要があります。この問題に取り組むための私の最初のステップは次のとおりです。
1)「ブロック」変数を定義し、それに512バイトのストレージを割り当てます
2)すべてのjpegを含むファイルを開き、eofまでループします
3)最初のブロック(512バイト)を取得して、中身を確認します
現在、私のコードはコンパイルされません。これが私のエラーです:
recover.c:27:19: error: implicitly declaring C library function
'malloc' with type 'void *(unsigned int)' [-Werror]
char* block = malloc(BYTE * 512);
^ recover.c:27:19: note: please include the header <stdlib.h> or explicitly provide a declaration for 'malloc'
recover.c:27:26: error: unexpected type name 'BYTE': expected
expression
char* block = malloc(BYTE * 512);
^ recover.c:45:18: error: conversion specifies type 'int' but the argument has type 'char *'
[-Werror,-Wformat]
printf("%c", block);
~^ ~~~~~
%s
これはこれまでの私のコードです:
#include <stdio.h>
#include <stdint.h>
typedef uint8_t BYTE;
//SOI - 0xFF 0xD8
//EOI - 0xFF 0xD9
//APPn - 0xFF 0xEn
int main(void)
{
//FAT - 512 bytes per block
char* block = malloc(BYTE * 512);
//open file containing pictures
FILE* fh = fopen("card.raw", "rd");
//make sure the file opened without errors
if (fh == NULL)
{
printf("something went wrong and file could not be opened");
return 1;
}
while (!feof(fh))
{
setbuf(fh, block);
printf("%c", block);
}
fclose(fh);
return 0;
}
私は何が間違っているのですか?char * block = malloc(BYTE * 512);ではないのはなぜですか。512バイトを割り当てますが、代わりにエラーをスローしますか?また、この作品はまだコンパイルできないので、512バイトを正しく読み取っていますか?そうでない場合、どうすればこれを達成できますか?
ありがとう。