Запись int в структуру и ошибка сегментации

Рейтинг: 0Ответов: 1Опубликовано: 02.05.2011

Приспичило написать программу учета финансов, код:

#include <stdio.h>
#include <stdlib.h>

#define MAX 100000 //Максимальная длина списка

struct table {
int day;
int month;
int year;
int summ;
char comment[161];
} consum[MAX], income[MAX];//Массивы структур расходов и доходов

// Добавление адреса в список доходов
void enter_income(void)
{
  int slot;

  slot = find_free_income();

  if(slot==-1) {
    printf("\nСписок заполнен");
    return;
  }

  printf("День: ");
  gets(income[slot].day);

  printf("Месяц: ");
  gets(income[slot].month);

  printf("Год: ");
  gets(income[slot].year);

  printf("Сумма: ");
  gets(income[slot].summ);

  printf("Комментарий: ");
  gets(income[slot].comment);
}

Данный код компилируется, программа запускается, но при попытке записать(к примеру) в income.day ошибка сегментации. Если изменить структуру так:

struct table {
  char day[3];
  char month[3];
  char year[3];
  char summ[10];
  char comment[161];
} consum[MAX], income[MAX];

то все ок, но налаживаемые ограничения, думаю, понятны.

Хочу int. Компилятор GCC, ОС: 64-битный Генту. Еще компилятор предупреждает для каждой строки с функцией gets() : предупреждение: результат ‘gets’, декларированной с атрибутом warn_unused_result, игнорируется

/////

Изменил код так: struct table { int day; int month; int year; long int summ; char comment[161]; } consum[MAX], income[MAX];//Массивы структур расходов и доходов // Добавление адреса в список доходов void enter_income(void) { int slot;

  slot = find_free_income();

  if(slot==-1) {
    printf("\nСписок заполнен");
    return;
  }

  printf("День: ");
  scanf("%i", income[slot].day);

  printf("Месяц: ");
  scanf("%i", income[slot].month);

  printf("Год: ");
  scanf("%i", income[slot].year);

  printf("Сумма: ");
  scanf("%i", income[slot].summ);

  printf("Комментарий: ");
  scanf("%i", income[slot].comment);
}

Вылетает с ошибкой сегментирования:

Введите номер нужного пункта: 1
День: 23
Ошибка сегментирования

Ответы

Ответов пока нет.