未处理的异常

时间:2018-12-31 18:59:16

标签: c exception-handling

在Visual Studio中,fscanf给了我这个错误:

在ProgramaçãoImperativa.exe中的0x6080D4EC(ucrtbased.dll)处未处理的异常: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 :(得分:5)

您将fscanf_s%s指定符一起使用不正确。

  

不同于fscanf ... fscanf_s ...要求缓冲区大小为   为类型c,C,s,S或字符串的所有输入参数指定   []中包含的控件集。缓冲区大小(以字符为单位)为   作为附加参数传递给指针之后   缓冲区或变量。

因为传递的参数太少,所以传递的用于接受最后一个%f值的地址是不确定的。

编译器应该警告您有关缓冲区大小参数丢失的情况。