Veuillez consulter le code suivant. Il essaie de passer un tableau en tant que char**
à une fonction:
#include <stdio.h>
#include <stdlib.h>
static void printchar(char **x)
{
printf("Test: %c\n", (*x)[0]);
}
int main(int argc, char *argv[])
{
char test[256];
char *test2 = malloc(256);
test[0] = 'B';
test2[0] = 'A';
printchar(&test2); // works
printchar((char **) &test); // crashes because *x in printchar() has an invalid pointer
free(test2);
return 0;
}
Le fait que je ne puisse le faire que compiler en faisant explicitement fond &test2
sur des char**
indices déjà que ce code est incorrect.
Pourtant, je me demande ce qui ne va pas exactement. Je peux passer un pointeur vers un pointeur vers un tableau alloué dynamiquement mais je ne peux pas passer un pointeur vers un pointeur pour un tableau sur la pile. Bien sûr, je peux facilement contourner le problème en affectant d'abord le tableau à une variable temporaire, comme ceci:
char test[256];
char *tmp = test;
test[0] = 'B';
printchar(&tmp);
Pourtant, quelqu'un peut me expliquer pourquoi il ne fonctionne pas coulé char[256]
à char**
directement?
char (*)[256]
àchar**
?