【发布时间】:2014-10-12 17:18:08
【问题描述】:
谁能解释一下为什么这段代码不起作用?
#include <stdio.h>
#include <stdlib.h>
void findAndPrint(char *arr[], int year, int month, int day);
int main()
{
char *dayTab[] = {
{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},
{31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}
};
findAndPrint(dayTab, 3, 3, 3);
getchar();
return 0;
}
void findAndPrint(char *arr[], int year, int month, int day ){
int d = 0;
if(month > 12 || month < 1 || day > 31 || day<1)
return;
int leap = ((year%4==0 && year%100!=0) || year%400 == 0)?1:0;
int i;
for(i=0; i<month-1; i++){
d += arr[leap][i];
}
d+= day;
printf("Day = %d", d);
}
IDE(Code::Blocks) 写入“程序收到信号 SIGSEGV。分段错误。”
【问题讨论】:
-
编译器不知道函数
findAndPrint内部char *arr[]的尺寸。要么将它作为char arr[][12]传递(或者如果你真的想要,作为char [2][12]),或者简单地在函数中声明它,因为它似乎是逻辑上正确的地方。另外,如果您打算多次调用它,请声明它static,以避免每次调用时都初始化。 -
void findAndPrint(char arr[][12], int year, int month, int day);,char dayTab[][12] = { -
你真的应该关心编译器发出的警告。他们不是为了好玩......
-
@BLUEPIXY 我在 'findAndPrint' 函数中声明了它,但 IDE 写的是一样的。
-
@user3051029:那是什么语言?您的
dayTab声明在 C 中甚至都不是远程有效的。没有兼容的 C 编译器会接受它。您正在为只有一层聚合嵌套的数据结构打开第二层嵌套{}。
标签: c arrays codeblocks segmentation-fault