Je lis une ligne d'un fichier (char by char, en utilisant fgetc()), où tous les champs (prénom, nom, ...) sont séparés par un ;
. Qu'est-ce que je veux maintenant faire est de créer un char**
, ajouter tous les caractères à cela et remplacer le ;
par \0
de sorte que je reçois effectivement une liste de tous les champs.c scinder un char * en un char **
Est-ce réellement possible? Et quand je crée un char **, par ex. char ** buf = malloc(80)
puis-je le traiter comme un tableau à une dimension? Si la mémoire retournée par malloc est contiguë?
EDIT
Sry, destiné à remplacer ;
par \0
, bot \n
.
EDIT 2
Ce code doit démontrer ce que je compte faire (peut clarifier les choses un peu):
int length = 80; // initial length char *buf = malloc(length); int num_chars = 0;
// handle malloc returning NULL
// suppose we already have a FILE pointer fp for (int ch = fgetc(fp); ch != EOF && ferror(fp) == 0; ch = fgetc(fp)) {
if (length == size) { // expand array if necessary
length += 80;
buf = realloc(buf, length);
// handle realloc failure
}
if (ch == ';') {
buf[num_chars] = '\0'; // replace delimiter by null-terminator
} else {
buf[num_chars] = ch; // else put char in buf
} }
// resize the buffer to chars read buf
= realloc(buf, num_chars);
// now comes the part where I'm quite unsure if it works/is possible
char **list = (char **)buf; // and now I should be able to handle it like a list of strings?