Если вы получите более 30 символов здесь:
while (fin >> buffer) {
... или если индекс> = 40 здесь:
strcpy(proteins[index].protein, buffer);
... программа, вероятно, аварийно завершит работу (неопределенное поведение). Кроме того, эти char*
не будут указывать на один и тот же адрес, поэтому сравнение не удастся:
proteins[index].protein == buffer