Проблема со сравнением строки
есть такое задание, необходимо Вывести названия книг определенного автора, изданных после 2000 года и определить долю книг в библиотеке по теме «Программирование» от общего количества экземпляров. НО я не знаю как вывести книги определенного автора (потому что я не умею сравнивать наверное указатель на символы и символы) и по той же причине не могу вывести книги по теме программирование. Вот моя реализация:
#include <stdio.h>
#include <stdlib.h>
struct Books
{
char surname[100];
char title[100];
char publisher[100];
int year;
char theme[100];
};
char vvod;
int save(char* filename, struct Books* st, int n);
int load(char* filename);
int main(void)
{
char* filename = "d.dat";
struct Books parametrs[] = {
"Толстой", "Война и мир", "ОАО Книжный", 2001, "Художественная литература",
"Достоевский", "Преступление и наказание", "Мир книги", 1900, "Художественная литература",
"Петров", "Программирование в С", "КнигаЛенд", 2002, "Программирование"};
int n = sizeof(parametrs) / sizeof(parametrs[0]);
save(filename, parametrs, n);
load(filename);
return 0;
}
int save(char* filename, struct Books* st, int n)
{
FILE* fp;
char* c;
int size = n * sizeof(struct Books);
if ((fp = fopen(filename, "wb")) == NULL)
{
perror("Файл не открыт");
return 1;
}
c = (char*)&n;
for (int i = 0; i < sizeof(int); i++)
{
putc(*c++, fp);
}
c = (char*)st;
for (int i = 0; i < size; i++)
{
putc(*c, fp);
c++;
}
fclose(fp);
return 0;
}
int load(char* filename)
{
FILE* fp;
char* c;
int m = sizeof(int);
int n, i;
int* pti = (int*)malloc(m);
if ((fp = fopen(filename, "rb")) == NULL)
{
perror("Невозможно открыть файл");
return 1;
}
c = (char*)pti;
while (m > 0)
{
i = getc(fp);
if (i == EOF) break;
*c = i;
c++;
m--;
}
n = *pti;
struct Books* ptr = (struct Books*)malloc(n * sizeof(struct Books));
c = (char*)ptr;
while ((i = getc(fp)) != EOF)
{
*c = i;
c++;
}
char a1[100] = "Достоевский";
for (int k = 0; k < n; k++)
{
if ((ptr + k)->year>2000){
printf("%d %s %s %s %d %s\n", k + 1, (ptr + k)->surname, (ptr + k)->title, (ptr + k)->publisher, (ptr + k)->year, (ptr + k)->theme);
}
}
free(pti);
free(ptr);
fclose(fp);
return 0;
}