bonjour,
j’ai un problème avec strncat qui me fait une erreur de segmentation.
dans le code suivant, jstring est une structure contenant un char* et un entier (la taille de la chaine).
le but est de faire une fonction qui prends comme paramètres 2 jstrings (string1 et string2) et qui ajoute la chaîne de string1 à la chaîne de string2.
voici mon code:
ce que je me suis dit, c’est que peut-être il faudrait réallouer de la place à la fin de la première chaine pour pouvoir ajouter la 2ème? je pensais à ça:
Pour allouer de la mémoire “à la suite” encore faudrait-il qu’il connaisse le buffer à étendre or la seule info qu’on lui donne c’est une taille à allouer (contrairement à realloc qui lui prend aussi l’adresse d’un buffer en paramètre). Possible que ce nouveau buffer se retrouve à la suite de l’ancien mais dans ce cas c’est une pure coincidence.
Malloc ne fait que réserver une zone mémoire dans la mémoire libre et renvoie un pointeur vers cette zone.
est-ce que tu veux dire que si je connais la taille de la chaîne que j’aimerais agrandir, je peux réallouer de la mémoire à partir de la fin ? (L’augmenter quoi)
en faisant par exemple string1->characters[i]= (char*)malloc(sizeof(char)) ??? (avec le i dans une boucle et qui commence sur le dernier caractère?
Non. Sauf à manipuler la mécanique interne de malloc/free (et je ne te le conseille pas), tu n’as d’autres choix que 1) allouer une zone mémoire correspondant à l’ancienne + ce que tu ajoutes 2) recopier la chaine actuelle sur ton nouveau char* 3) recopier après la chaîne actuelle ce que tu ajoutes 4) libérer l’ancienne (“chaine actuelle”)
Non, “connaitre le buffer” = connaitre son adresse (c’est l’adresse du buffer que tu passes en paramètre à free ou realloc, pas la taill). Si tu ne connais que la taille ça ne suffit pas, tu n’es pas le seul dans le système à allouer des buffers de cette taille.