好吧,我的C有点生疏,但我想我会在C下做我的下一个(小)项目,所以我可以重新打磨它,少于20行我已经有一个seg故障。铸造char [] []为char **会导致段错误?
这是我的完整代码:
#define ROWS 4
#define COLS 4
char main_map[ROWS][COLS+1]={
"a.bb",
"a.c.",
"adc.",
".dc."};
void print_map(char** map){
int i;
for(i=0;i<ROWS;i++){
puts(map[i]); //segfault here
}
}
int main(){
print_map(main_map); //if I comment out this line it will work.
puts(main_map[3]);
return 0;
}
我完全困惑,这是怎么造成段错误。当从[][]
投射到**
时发生了什么?!这是我得到的唯一警告。
rushhour.c:23:3: warning: passing argument 1 of ‘print_map’ from incompatible pointer type rushhour.c:13:7: note: expected ‘char **’ but argument is of type ‘char (*)[5]’
是[][]
和**
真的不兼容的指针类型?他们看起来像他们只是我的语法。
“不兼容的指针类型”?你什么意思?你的'[] []'类型是*数组类型,而不是指针类型。你为什么将'[] []'作为指针类型? – AnT 2010-05-24 07:48:06
@Andrey这是我C语言知识中一个巨大的巨大差距。我完全理解指针,但不是数组。 :) – Earlz 2010-05-24 07:53:15