Ok la mia C è un po 'arrugginita, ma ho pensato che avrei realizzato il mio prossimo (piccolo) progetto in C in modo da poter eseguire il lucido su di esso e meno di 20 righe in Ho già un difetto di seg.casting char [] [] su char ** causa segfault?
Questo è il mio codice completo:
#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;
}
Sono completamente confuso su come questo sta causando un segfault. Cosa sta succedendo quando si trasmette da [][]
a **
!? Questo è l'unico avvertimento che ricevo.
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]’
Sono [][]
e **
davvero non tipi di puntatore compatibili? Sembra che siano solo sintassi per me.
"Tipi di puntatori non compatibili"? Cosa intendi? Il tipo '[] []' è un tipo * array *, non un tipo di puntatore. Perché ti stai riferendo a '[] []' come un tipo di puntatore ??? – AnT
@Andrey è un grosso e ovvio divario nella mia conoscenza. Comprendo perfettamente i puntatori ma non gli array. :) – Earlz