int *month, *day;
printf("%p,%p\n", month, day);
执行上面的代码示例返回: 0x7fffeda86190,(无)
此外,每当我将某些内容分配给 *day 指针时,我都会遇到段错误,如下面来自 K&R 第 5.7 章的代码所示:
是什么导致了这种行为,我在哪里可以了解更多关于这种行为的信息?
static char daytab[2][13] = {
{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}
};
int main()
{
int *month, *day;
printf("%p,%p\n", month, day);
month_day(2009, 78, month, day);
printf("%d,%d\n", *month, *day);
}
int day_of_year(int year, int month, int day)
{
int i, leap;
leap = year%4 == 0 && year%100 != 0 || year%400 == 0;
for (i = 1; i < month; i++)
day+= daytab[leap][i];
return day; /*day of the year*/
}
int month_day(int year, int yearday, int *pmonth, int *pday)
{
int i, leap;
leap = year%4 == 0 && year%100 != 0 || year%400 == 0;
for (i = 1; yearday > daytab[leap][i]; i++)
yearday -= daytab[leap][i];
*pmonth = i;
printf("%d,%d\n", *pmonth, yearday);
*pday = yearday;
}
最佳答案
您的 month
和 day
指针指向任何地方(或某个随机位置)。让我们看一下 day
指针。
*天=值;
当您尝试写入由 day
指向的内存时,您的操作系统会发现写入此地址(0?)毫无意义并会终止您的程序。
解决方案 1:使用 malloc
动态分配一些内存并将 day
指向那里:
day = (int*)malloc(sizeof(int));
*day = 10; //this is now legal
你也可以让指针指向一些数组中的内存等。
解决方案 2:将指向“常规”变量的指针传递给 month_day
函数:
int mymonth, myday;
month_day(2009, 78, &mymonth, &myday);
// now mymonth and myday should have expected values
希望这对您有所帮助。
关于C K&R : printf pointer = nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20019754/