Почему эта программа РАБОТАЕТ? - C (СИ)
Формулировка задачи:
У меня есть две структуры, с одинаковым кол-вом полей, но поля разного типа:
Есть функция для обработки "шапки": ( если что, это считывание шапки таблицы из файла, но это не важно)
...И совершенно другая, отдельная ф-ия, в которую я отдаю указатель на вторую структуру.
В этой ф-ии я вызываю ф-ию Read_Shapka_File, но отдаю ей указатель на другую структуру, не ту, что положено:
.
Мало того что компилятор не ругается, но программа работает и выводит-таки эту "шапку". КАК???
Если это из-за указателей в обеих ф-иях, это не объясняет, почему нет конфликта типов.
Скидываю программу, постарался удалить все, что не относится к данной проблеме
struct hat
{
char s1[20], s2[20], s3[20] ;
} shapka;
typedef struct monopolies
{
char name[40];
int year;
float capital;
}monopolies;
monopolies monopoly; //создаю тут структуру типа monopoliesvoid Read_Shapka_File(FILE *f, struct hat *shapka) //как вы видите, отдаю в ф-ию указатель на структуру типа hat
{
if (fscanf(f, "%s%s%s", shapka->s1, shapka->s2, shapka->s3)!=EOF)
{
printf("%-20s %15s %20s\n\n", shapka->s1, shapka->s2, shapka->s3);
}
else
{
exit(ERROR_READING_FILE);
}
}void Job1_Two_Files(char* putInp, monopolies *monopoly)
Read_Shapka_File(inp, monopoly);
Решение задачи: «Почему эта программа РАБОТАЕТ?»
textual
Листинг программы
if (inp=fopen(putInp, "r")==NULL)
Объяснение кода листинга программы
- Программа открывает файл с помощью функции fopen.
- Файл открывается в режиме чтения (
r). - Если файл не может быть открыт (в случае ошибки), программа выдает сообщение об ошибке и завершает выполнение.