myfile = fopen(countries,"r");
Проверьте возвращаемое значение для ошибок
while (!feof(myfile))
{
fscanf(myfile, "%[^\n]", c.region);
Вам необходимо передать адрес c.region: &c.region
.Тем не менее, это по-прежнему неправильно, поскольку вы выделяете только один символ, и fscanf будет читать символы до тех пор, пока они не совпадут.Вы должны изменить объявление c.region на массив символов c.region[[00]
или что-то в этом роде.
Кроме того, c - это массив, а не структура, поэтому я не думаю, что это код, который вы на самом деле используете.Вы имели в виду c [0] .region?
Вам также следует беспокоиться о том, чтобы прочитать больше, чем вы выделили.Узнайте о способах fscanf ограничить то, что он хранит в переданном адресе
Где вы устанавливаете i в ноль?
while (!feof(myfile))
{
fscanf(myfile, "%d, %[^\n]", c[i].country_code, c[i].country);
Опять же, вам нужно передать адрес поля country_code &c[i].country_code"
.Обратите внимание, что вам не нужно использовать оператор & в поле страны, хотя другие ответы пока говорят, что вы делаете, поскольку страна является массивом символов, и поэтому c [i] .country совпадает с & c [i] .country
i++;
Что произойдет, если в файле будет больше строк, чем выделенных записей в массиве c [i]?