char *c;
fseek(fpBmp, 0, SEEK_END);
c = malloc(size + 1);
memset(c, 0, size + 1);
fseek(fpBmp, 0, SEEK_SET);
int count = fread(c, size, 1, fpBmp);
for (int x = 0; x < width; x++)
{
int cnt = 0;
for (int y = height - 1; y >= 0; y--)
{
int index = (x * PIXEL_SIZE) + (y * (width * PIXEL_SIZE)) + (padding * y);
RGBTRIPLE* pixel = (RGBTRIPLE*)&image[index];
unsigned char blue = pixel->rgbtBlue;
unsigned char green = pixel->rgbtGreen;
unsigned char red = pixel->rgbtRed;
unsigned char gray = (red + green + blue) / PIXEL_SIZE;
strcpy(c[cnt], ascii[gray * sizeof(ascii) / 256]);
cnt++;
}
fwrite(c, size, cnt, stdout);
}
fclose(c);
fclose(fpBmp);
free(image);
return 0;
}
큰 틀에서 바꾼 부분이 이건데 옛날에 71.11 를 참고하다 보니 뭔가 더 엉망진창이 되었는데 도저히 모르겠네요.. 어떤 식으로 고쳐야 할까요??
81.7은 전체 코드를 작성해서 제출하는 심사문제입니다.
또한, 코드는 71.11이 아니라 UNIT 82의 본문에 나오는 코드를 이용해야 합니다.
malloc부터 완전히 접근이 다르고, 본문에 제시된 예제 코드도 UNIT 71과 82가 다릅니다.
문자열을 읽어들인다면 끝에 널 문자가 필요하니까 size + 1만큼 할당하는 게 UNIT 71이라면 바이너리 파일을 읽어들일 때는 문자열이 아니고 바이너리의 크기만큼만 읽으면 되니까 size만큼만 메모리를 할당하면 끝입니다.
malloc(size)로 제시된 코드가 UNIT 82이고, malloc(size+1)로 제시된 코드는 UNIT 71입니다.
본문을 찬찬히 읽고, 본문의 코드를 하나씩 완성하고, 심사 문제에서 퍼즐을 완성하기 바랍니다.