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 шт):
Вы не забыли, что должны указывать адрес, куда именно читать данные? Но разве у вас в mass[i] хранится указатель?
fscanf(D1, "%d", &mass[i]);
Странная ошибка — при том, что в других местах вы действуете вполне верно...
P.S. Да, а где это место в "полном коде программы"? Там вы такое чтение не используете.
После некоторых изменений код заработал.
А именно: Я создал указатель на массив 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+");