Я пишу программу для одного из упражнений в книге ANSI C, и программа падает, когда я достигаю эту линию:программа C падает из-за присвоение указателя
*pmonth = i;
в функции month_day.
#include <stdio.h>
void month_day(int year, int yearday, int *pmonth, int *pday);
int main(int argc, char *argv[]){
int year = 1994;
int *month;
int yearday = 288;
int *day;
month_day(year, yearday, month, day);
printf("Month = %d, day = %d", *month, *day);
return 1;
}
static char daytab[2][14] = {
{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
void month_day(int year, int yearday, int *pmonth, int *pday){
int i, leap;
leap = (year%4 == 0 && year%100 != 0) || year%400 == 0;
char *p = &daytab[leap][1];
for(i = 1; yearday> (int) *p; i++){
yearday -= *p++;
}
*pmonth = i; /*CRASHES HERE*/
*pday = yearday;
}
Любые идеи, почему это происходит? Я относительно новичок в указателях, поэтому я мог легко совершить глупую ошибку. Заранее спасибо.
EDIT Благодарим вас, ребята, за ответы и терпение, пытаясь получить винт указателей.
'INT месяц, день,' '.. month_day (год, yearday, и месяц, &day);' ' – BLUEPIXY
* pmonth = i' есть ** не ** присвоение указателя – tofro
Большинство компиляторов должны выдавать предупреждения о коде в. вопрос, некоторые по умолчанию. gcc и clang нужно, например, опция '-Wall'. Тогда вопрос, надеюсь, будет о том, что делать с предупреждением:« месяц »используется неинициализированным в этой функции. warning –