Eu estou tentando se familiarizar com o tratamento de ponteiros como matrizes, argv e argc e apenas apontadores em geral. Toda vez que tento executar este código compila, mas quando eu executá-lo no prompt de comando eu voltar "exceção não tratada: System.AccessViolationException: tentou ler ou gravar memória protegida. Isso é muitas vezes uma indicação que outra memória está corrompida. no<_iobuf ,="" sbyte=""> de fscanf.. Main<Int32 argc,="" sbyte="" argv=""> em c:\programs\visual studio 2010\argvread\argvread.cpp:line 40 em _mainCRTStartup<>"e não tenho idéia o que isso significa.
Eu acho que tem algo a ver com a maneira que eu estou lendo no arquivo. Eu estou usando o Microsoft Visual Studio 2010, mas tentando escrever em linguagem C, em vez de C++ se isso tem alguma coisa a ver com isso também. Se alguém poderia me ajudar a ver o que estou fazendo errado eu agradeceria muito. Aqui está o que eu tenho:
#include "stdafx. h"
# incluem "stdio. h"
# incluem "STDLIB. h"
# incluem "String"
usando o namespace System;
//FUNCTIONS
void find_average (int soma, int int total, média);
int main (int argc, char argv[])
{
int arr;
int soma = 0;
//Total é o número total de elementos encontrados, não uma soma
int total = 0;
média de int = 0;
//Make-se de que existem dois argumentos, uma execução e um arquivo de entrada
se (argc! = 2)
{
printf ("\nError. Não é suficiente ou demasiados argumentos. \n");
printf ("deve haver a execução e a entrada do arquivo. \n");
Exit (EXIT_FAILURE);
}
//Declare um ponteiro de arquivo para abrir o arquivo de entrada de linha de comando
ARQUIVO em = fopen (argv [1], "r");
//Check para ver se o arquivo foi encontrado
= se (no = NULL)
{
printf ("\nInput arquivo não encontrado");
Exit (EXIT_FAILURE);
}
//Read os valores do arquivo de entrada
enquanto (! feof(in))
{
se (fscanf (em, "% d", &arr[total]) > 0)
{
//Sum todos os elementos e incriment total elementos encontrados
soma = soma + arr [total];
total + +;
}
}
//Close o arquivo
fclose (em);
//Find média
find_average (& soma, & total, & média);
//Print resultados
printf ("\nThere foram %d entradas encontradas. \n", total);
printf ("a soma é %d\n", soma);
printf ("a média é %d\n", média);
retorno 0;
}
void find_average (int soma, int int total, média)
{
média = soma / total;
} Eu estou executando este código, digitando o seguinte no prompt de comando: sample1.txt de argvread.exe, então não há 2 argumentos necessários, a execução e um arquivo para ler em.</Int32></_iobuf>