приведение char [] [] к char ** вызывает segfault?
Хорошо, мой C немного ржавый, но я подумал, что сделаю свой следующий (маленький) проект на C, чтобы я мог отшлифовать его, и менее 20 строк у меня уже есть ошибка сегмента.
Это мой полный код:
#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;
}
Я полностью сбит с толку относительно того, как это вызывает segfault. Что происходит при кастинге из[][]
в**
!? Это единственное предупреждение, которое я получаю.
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]’
Являются[][]
а также**
действительно несовместимые типы указателей? Они кажутся мне просто синтаксисом.