Исключение необработанное - PullRequest
0 голосов
/ 31 декабря 2018

В Visual Studio утилита fscanf выдает мне эту ошибку:

Необработанное исключение в 0x6080D4EC (ucrtbased.dll) в Programação Imperativa.exe: 0xC0000005: Место записи нарушения прав доступа 0x00D0B000.

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <locale.h>
    #include <stdlib.h>
    #include <string.h>


   struct estrutura
  {
char nome[100];
    float no1;
float no2;
float valor;
  }v1, r1, r2, r3, r4;

int main(void)
{
FILE *circuito;
int x;
setlocale(LC_ALL, "Portuguese");
circuito = fopen("circuito.cir", "r");


if (circuito == NULL)
{
    printf("Erro na abertura do ficheiro");
}
else
{
    while ((x = fgetc(circuito)) != '\n');

    fscanf_s(circuito, "%s %f %f %f\n", v1.nome, &v1.no1, &v1.no2, &v1.valor);
    printf("%s %lf %lf %lf \n", v1.nome, v1.no1, v1.no2, v1.valor);

    fscanf_s(circuito, "%s %f %f %f\n", r1.nome, &r1.no1, &r1.no2, &r1.valor);
    printf("%s %f %f %f \n", r1.nome, r1.no1, r1.no2, r1.valor);
}





return 0;
}

1 Ответ

0 голосов
/ 31 декабря 2018

Вы используете fscanf_s со спецификатором %s неправильно.

В отличие от fscanf ... fscanf_s ... требует, чтобы размер буфера был указан для всех входных параметров типа c, C, s, S или строковых управляющих наборов, которые заключеныв [].Размер буфера в символах передается как дополнительный параметр, следующий сразу за указателем на буфер или переменную.

Поскольку передано слишком мало аргументов, адрес передан для принятия значения для окончательного значения %f не определено.

Компилятор должен был предупредить вас об отсутствующем аргументе размера буфера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...