ligne 3
edges[0] = arr;
types incompatibles dans l'affectation: arr
est un char *
et edges[0]
est un int *
.
Ce qui se produit est la suivante:
int *edges[500];
char arr[] = {'c','d'};
arr [0] est 'c' et arr [1] est 'd'
edges[0] = arr;
Ignorer la compatibilité des types, des bords [0 ] pointez sur le int
à l'adresse où les 'c' et 'd' (et éventuellement deux autres caractères non spécifiés) sont.
printf("%c %c", edges[0][0],edges[0][1]);
bords [0] [0] est le premier entier dans des bords [0] qui est le mélange de 'c', 'd' (et, éventuellement, deux caractères plus non spécifiés). Cette valeur est convertie en caractère non signé, ce qui donne 'c' qui est imprimé.
bords [0] [1] pointe vers l'entier juste après le mélange de 'c', 'd' (et éventuellement deux autres caractères non spécifiés). Cet emplacement de mémoire n'a pas été initialisé et il se peut qu'il soit hors de portée de votre processus.
si vous imprimez un int au lieu de 2 caractères
printf("%d\n", edges[0][0]);
vous verrez le mélange de 'c', 'd' (et peut-être deux caractères non spécifiés).
La meilleure chose à faire est de bien vous entendre.
Êtes-vous sûr que le '-' devrait être là? – Jacob
@Jacob finit par être là car 'edges [0] [0]' et 'edges [0] [1]' finissent par accéder à de la mémoire non initialisée. Sur mon ordinateur, le programme affiche «c» ' –
Droite, gotcha Mais ne devrait pas l'OP« veulent afficher »,« cd »et pas« c - d »? – Jacob