#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
char *readFile(char *filename, int *readSize)
{
FILE *fp = fopen(filename, "rb");
if (fp == NULL)
return NULL;
int size;
char *buffer;
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fseek(fp, 0, SEEK_SET);
buffer = malloc(size + 1);
memset(buffer, 0, size + 1);
if (fread(buffer, size, 1, fp) < 1)
{
*readSize = 0;
free(buffer);
fclose(fp);
return NULL;
}
*readSize = size;
fclose(fp);
return buffer;
}
int main()
{
int size;
char *doc = readFile("example.json", &size);
if (doc == NULL)
return -1;
JSON json = { 0, };
parseJSON(doc, size, &json);
printf("Title: %s\n", json.tokens[1].string);
printf("Year: %d\n", (int)json.tokens[3].number);
printf("Runtime: %d\n", (int)json.tokens[5].number);
printf("Genre: %s\n", json.tokens[7].string);
printf("Director: %s\n", json.tokens[9].string);
printf("Actors:\n");
printf(" %s\n", json.tokens[11].string);
printf(" %s\n", json.tokens[12].string);
printf(" %s\n", json.tokens[13].string);
printf(" %s\n", json.tokens[14].string);
printf(" %s\n", json.tokens[15].string);
printf("imdbRating: %f\n", json.tokens[17].number);
freeJSON(&json);
free(doc);
return 0;
}
여기서 어디가 틀린거죠??답변후 제가 쓴 코드는 삭제해주세요
심사문제에는 동작하는 전체 코드를 제출해야 합니다.
현재 코드는 JSON이 없습니다. UNIT 83.1에서 작성한 JSON 구조체도 필요합니다.
error C2065: 'JSON': 선언되지 않은 식별자입니다.
문의한 코드에는 JSON 자료형이 정의되어 있지 않아서입니다.
UNIT 83 예제와 비교해보세요.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
typedef enum _TOKEN_TYPE {
TOKEN_STRING,
TOKEN_NUMBER,
} TOKEN_TYPE;
typedef struct _TOKEN {
TOKEN_TYPE type;
union {
char *string;
double number;
};
bool isArray;
} TOKEN;
#define TOKEN_COUNT 20
typedef struct _JSON {
TOKEN tokens[TOKEN_COUNT];
} JSON;
char *readFile(char *filename, int *readSize)
{
FILE *fp = fopen(filename, "rb");
if (fp == NULL)
return NULL;
int size;
char *buffer;
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fseek(fp, 0, SEEK_SET);
buffer = malloc(size + 1);
memset(buffer, 0, size + 1);
if (fread(buffer, size, 1, fp) < 1)
{
*readSize = 0;
free(buffer);
fclose(fp);
return NULL;
}
*readSize = size;
fclose(fp);
return buffer;
}
int main()
{
int size;
char *doc = readFile("example.json", &size);
if (doc == NULL)
return -1;
JSON json = { 0, };
parseJSON(doc, size, &json);
printf("Title: %s\n", json.tokens[1].string);
printf("Year: %d\n", (int)json.tokens[3].number);
printf("Runtime: %d\n", (int)json.tokens[5].number);
printf("Genre: %s\n", json.tokens[7].string);
printf("Director: %s\n", json.tokens[9].string);
printf("Actors:\n");
printf(" %s\n", json.tokens[11].string);
printf(" %s\n", json.tokens[12].string);
printf(" %s\n", json.tokens[13].string);
printf(" %s\n", json.tokens[14].string);
printf(" %s\n", json.tokens[15].string);
printf("imdbRating: %f\n", json.tokens[17].number);
freeJSON(&json);
free(doc);
return 0;
}
이렇게 해도 안되네요
1>Z:\Project1\Project1\src.c(74,13): warning C4013: 'parseJSON'이(가) 정의되지 않았습니다. extern은 int형을 반환하는 것으로 간주합니다.
1>Z:\Project1\Project1\src.c(90,12): warning C4013: 'freeJSON'이(가) 정의되지 않았습니다. extern은 int형을 반환하는 것으로 간주합니다.
경고 메시지를 살펴보기 바랍니다.
해당 UNIT을 제대로 학습하고, 이해한 다음에 심사문제에 도전하기 바랍니다.
parseJSON이 정의되지 않았다는 것은 이 함수를 호출하지만, 이 함수를 정의한 적이 없다는 뜻입니다.
해당 UNIT을 학습했다면 저지를 수 없는 유형의 오류입니다.
JSON이 없다는 답변에 이것만 찾아서 넣는 것은 "생각하지 않고 문제를 해결하겠다"로 여겨질 수 있지만, 프로그래밍은 논리적인 생각을 핵심으로 하는 일이고, 프로그래머는 코딩보다 논리적인 생각이 핵심인 직업입니다.
경고 메시지만 살펴보아도 누락된 것을 알 수 있고, 스스로 문제를 해결할 수 있습니다. UNIT 83에서는 JSON 파싱을 위한 자료 구조, 각각의 함수를 설명하고 있습니다. 해당 단원을 읽지 않고, 코드를 복붙하는 것으로 심사문제 통과를 시도하고 있는 것으로 여겨집니다.
따라서 이 스레드의 답변은 이것으로 마지막입니다.
요즘 화제된 글 하나 링크합니다.