Przede wszystkim, bez powodu używasz std::string w tym kodzie. Po drugie: kod kopioania stringa do tablic charów jest lekko niepoprawny, bo np. w przypadku imienia kopiujesz 20 bajtów podczas gdy wystarczyłoby skopiować 4 (3 składający się na słowo "Jas" i kończące 0). Nie jest to problemem gdy tylko czytasz z adresu zwróconego przez c_str(), ale jednak wychodzisz poza pamięć stringa i w efekcie niepotrzebnie kopiujesz jakieś śmieci, które i tak nie mają żadnego znaczenia. Mógłbyś po prostu użyć strcpy zamiast strncpy, ponieważ strcpy sam sobie ustala gdzie string się kończy kopiując do momentu aż natrafi na 0 (razem z zerem). Także również niepotrzebnie "manualnie" ustawiasz kończące 0, bo zostało już przekopiowane podczas strncpy (i tak samo stanie się przy strcpy). Także mogłoby to wyglądać tak:
#include <iostream>
#include <fstream>
#include <cstring>
#include <string>
using namespace std;
struct Struktura{
char Imie[20];
char Nazwisko[20];
int IQ;
};
int main()
{
Struktura s1;
strcpy(s1.Imie, "Jas");
strcpy(s1.Nazwisko, "Fasola");
s1.IQ=200;
}