// セキュアなバージョンの関数を使用するための定義 #define _CRT_SECURE_NO_WARNINGS #include #include #include // サンプルのオブジェクト typedef struct { int id; char name[50]; } MyObject; // オブジェクトをXMLにシリアル化する関数 void serializeObject(FILE* file, const MyObject* obj) { fprintf(file, "\n"); fprintf(file, " %d\n", obj->id); fprintf(file, " %s\n", obj->name); fprintf(file, "\n"); } // XMLをオブジェクトに逆シリアル化する関数 void deserializeObject(FILE* file, MyObject* obj) { char line[100]; while (fgets(line, sizeof(line), file) != NULL) { if (strstr(line, "") != NULL) { if (sscanf(line, " %d", &(obj->id)) != 1) { fprintf(stderr, "Error reading ID from XML\n"); // エラーハンドリングの追加(例:プログラムを終了するなど) exit(EXIT_FAILURE); } } else if (strstr(line, "") != NULL) { if (sscanf(line, " %49[^<]", obj->name) != 1) { fprintf(stderr, "Error reading Name from XML\n"); // エラーハンドリングの追加(例:プログラムを終了するなど) exit(EXIT_FAILURE); } } } } int main() { // サンプルオブジェクトの作成 MyObject obj = { 1, "SampleObject" }; // ファイルへの書き込み(fopen_sを使用) FILE* fileWrite; if (fopen_s(&fileWrite, "output.xml", "w") != 0) { perror("Error opening file for writing"); return 1; } serializeObject(fileWrite, &obj); fclose(fileWrite); // ファイルからの読み込み(fopen_sを使用) MyObject newObj; FILE* fileRead; if (fopen_s(&fileRead, "output.xml", "r") != 0) { perror("Error opening file for reading"); return 1; } deserializeObject(fileRead, &newObj); fclose(fileRead); // 読み込んだオブジェクトの表示 printf("Deserialized Object: ID = %d, Name = %s\n", newObj.id, newObj.name); return 0; }