2015-11-28 5 views
0

Ошибка проверки времени выполнения # 2 - Обнуление переменной «имя файла» было повреждено.Ошибка проверки времени выполнения # 2 в C Обработка файлов

Мой код работает всякий раз, когда я пытаюсь обработать первое место памяти. Я могу обработать файл .txt правильно, и я могу его распечатать. Тем не менее, когда я запрашиваю вторую ячейку памяти, программа вылетает из строя. Я попытался увеличить размер имени файла, и я также закрываю первый файл, поэтому я не знаю. Любая помощь приемлема! Спасибо!!

This is a photo of the output

Это мой код:

#include <stdio.h> 

#define SIZE 100 //100 entries (100lines on a file) 
#define SENSORN 100 

int main() 
{ 
    FILE *fptr; 
    char filename[1000]; 

    char dummy1[1];//dummy character that help me to erase what is the buffer when using gets() 
    int numberOfSensors; 
    int time[SENSORN][SIZE]; 
    float powerConsumption[SENSORN][SIZE]; 

    int sensor_num; 
    int count1 = 0; 

    printf("Please enter the number of sensors: "); 
    scanf("%d", &numberOfSensors); 

    //Asking for the link 
    //numberOfSensors - 1 because for example, if we want only 2 sensors we need sensor0 and sensor1 only 
    for (sensor_num = 0; sensor_num <= (numberOfSensors - 1); sensor_num++) 
    { 
     printf("Please enter the file location for sensor %d\n", sensor_num); 
     gets(dummy1);//clearing the buffer 
     gets(filename); 

     fptr = fopen(filename, "r"); 

     //if file cannot be opened, then display and error message 
     if (fptr == NULL) 
     { 
      printf("Error opening the file! %s \n", filename); 
      printf("Please restart the program \n"); 
      return 0; //exit the program 
     } 

     else 
     { 
      //Loop that let us read and print all the file by storing each value to its respective array 

      while (!feof(fptr)) 
      { 
       //storing all the values in their respective array 
       //sensor_num is the sensor number 
       //count1 is the line number we are reading from the file 
       fscanf(fptr, "%d %f", &time[sensor_num][count1], &powerConsumption[sensor_num][count1]); 

       //making sure we have all the values stored 
       //Note: do not comment the following line in order to check that all values are stored 
       fprintf(stdout, "%d %6.2f \n", time[sensor_num][count1], powerConsumption[sensor_num][count1]); 
       count1++; 
      } 
     } 
     //closing file 
     fclose(fptr); 
     } 
    } 
} 
+0

«символ dummy1 [1] нет, нет! –

+0

Если вы только что набрали [256], по умолчанию у вас не возникло бы проблемы с завершением NULL-терминатора вне пределов! –

ответ

1

Как Мартин сказал Джеймс char dummy1[1]; не является абсолютным нет-нет.

Использование fgets() вместо gets(), поэтому вместо

gets(dummy1);//clearing the buffer 
gets(filename);` 

попробовать,

fgets(filename, sizeof(filename) , stdin);

+0

Я пробовал это, но программа не перестает спрашивать меня о местоположении файла. Он прыгает прямо: Ошибка открытия файла! Я использовал get (dummy1), чтобы очистить буфер :( –

+0

OK, теперь используйте ваш отладчик для разрыва после получения (имя файла) ', а затем проверьте' filename '. –

+0

..и выясните, что терминатор линии char находится в буфере «filename». Замените его на NULL. –

Смежные вопросы