VS вызывает исключение __stdio_common_vfscanf при использовании fprintf()

При поптыке считать данные из файла Data1 при помощи функции fscanf, вызывается исключение __stdio_common_vfscanf, которое я не могу исправить.

Код исключения:

return __stdio_common_vfscanf(
            _CRT_INTERNAL_LOCAL_SCANF_OPTIONS,
            _Stream, _Format, _Locale, _ArgList);
    }

Cамо исключение ругается на вот эту часть кода, именно на сам fscanf:

for (i = 0; i < 10; i++) {
        fscanf(D1, "%d", mass[i]);
    }

Полный код программы:

#define _CRT_SECURE_NO_WARNINGS
#include <conio.h>
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>
int a[10];
int mass[10];
FILE* D1;
int main() {
    printf("Print 10 elem mass: ");
    input(a);
    printf("Printed mass: ");
    function();
    getchar();
    return 0;
}

int input(int a[10]) {
    D1 = fopen("Data1.txt", "w");
    int* p = a;
    int i;
    for (i = 0; i < 10; i++) {
        scanf_s("%d", &*(p+i));
        fprintf(D1, "%d ", *(p + i));// запись в Data1.txt
       
    }
    fclose(D1);
    
}

int function() {
    int mass[10];
    int *z = mass;
    int k;
    int i;
    k = 0;
    D1 = fopen_s(D1,"Data1.txt", "a+");
    for (i = 0; i < 10; i++) {
        fscanf(D1, "%d", &mass[i]); //считывание данных из Data1.txt
    }
    for (i = 0; i < 10; i++) {
        
        fprintf(D1, "%d ", mass[i]);//вывод считанного из Data1.txt
    }
    fclose(D1);
     D1 = fopen(&D1, "Data1.txt", "a");
    
    for (i = 0; i < 10; i++) {
        if (*(z + i) % 10 == 0) {
            fprintf("%d ", mass[i]);
            k++;
        }
    }
    if (k == 0)
        fprintf(D1,"No numbers");
    fclose(D1); 
}

Насколько я понял, я не добавил в fscanf() поле _ArgList, но что это такое я так и не понял. Заранее спасибо за помощь!


Ответы (2 шт):

Автор решения: Harry

Вы не забыли, что должны указывать адрес, куда именно читать данные? Но разве у вас в mass[i] хранится указатель?

fscanf(D1, "%d", &mass[i]);

Странная ошибка — при том, что в других местах вы действуете вполне верно...

P.S. Да, а где это место в "полном коде программы"? Там вы такое чтение не используете.

→ Ссылка
Автор решения: Nifezu

После некоторых изменений код заработал.

А именно: Я создал указатель на массив mass[10] и проводил fscanf через него:

    int mass[10];
    int* z = mass;
    for (i = 0; i < 10; i++) {
            fscanf(D1, "%d", &*(z + i)); 
        }

Так же я убрал лишнее присваивание

D1 = fopen_s(D1,"Data1.txt", "a+");

на

fopen_s(D1,"Data1.txt", "a+");
→ Ссылка