Cette ligne:
char * lines[2];
déclare un tableau de deux char
pointeurs. Cependant, vous n'avez pas initialiser les pointeurs vers n'importe quoi. Donc plus tard, quand vous faites *tmp1 = (char)c;
, vous affectez le caractère c
à quelque part en mémoire, peut-être même l'adresse zéro (c'est-à-dire NULL
) ce qui est une mauvaise chose.
La solution consiste à créer le tableau comme un tableau de tableaux, comme
char lines[2][30];
Cela déclare lignes d'avoir deux rangées de 30 caractères chacune, et puisque les chaînes a besoin d'un caractère de terminaison spécial vous pouvez chaîne de jusqu'à 29 caractères en eux.
La deuxième solution est d'allouer dynamiquement la mémoire pour les chaînes:
char *lines[2];
lines[0] = malloc(30);
lines[1] = malloc(30);
Essentiellement, cela fait la même chose que ci-dessus tableau-de-tableaux déclaration, mais alloue la mémoire sur le tas.
Bien sûr, peut-être vous vouliez une seule chaîne d'un seul caractère (plus la terminaison), alors vous étiez presque droite, il suffit de supprimer l'astérisque:
char line[2]; /* Array of two characters, or a string of length one */
-1 Le problème est que 'lines' n'est pas initialisé. –
lignes [0] n'est pas le type de caractère – phoxis
Merci pour le correctif, j'ai défait mon downvote. –