void splitLine(Document *document, location loc) {
char* newLine = malloc(loc.idx * sizeof(char) + 1);
char* origLine = strdup(Document_get_line(document, loc.line_no));
char* nextLine = malloc((strlen(origLine)-loc.idx) * sizeof(char) + 1);
newLine = strncpy(newLine, origLine, loc.idx);
newLine[loc.idx] = '\0';
nextLine = strncpy(nextLine, origLine+loc.idx, strlen(origLine)-loc.idx);
nextLine[strlen(origLine)-loc.idx] = '\0';
Document_set_line(document, loc.line_no, newLine);
Document_insert_line(document, loc.line_no+1, nextLine);
free(newLine);
free(nextLine);
free(origLine);
newLine = NULL;
nextLine = NULL;
origLine = NULL;
}
Ce code est utilisé pour séparer la ligne 'loc.line_no'th' dans 'document' au niveau du caractère 'loc.idx'th en deux parties, mais je suis avoir du mal à suivre le code surtout à partir de la quatrième ligne de la fonction. S'il vous plaît aidez-moi à suivre ce que chaque ligne du code fait.scinder une ligne en deux lors de la création d'un éditeur de texte
Il n'y a qu'une seule fonction que vous devriez apprendre à comprendre ce code, et c'est strncpy. Avez-vous lu ce qu'il fait? C'est la fonction de la bibliothèque C std. Rappelez-vous que l'assignation de '\ 0' à la fin d'un tableau char est de faire une chaîne terminée par un caractère nul - pour le rendre approprié à toutes les fonctions de manipulation de chaînes. – MattAPiroglu
Les paires de lignes f/cinquième et sixième/septième copient les deux parties du texte scindé dans des emplacements temporaires. La première ligne de chaque paire utilise la fonction 'strncpy' qui protège contre le débordement de la mémoire tampon. Le second de chaque paire écrit une terminaison de chaîne de précaution ''\ 0'' car' strncpy' ne le fait pas toujours. La première partie de la ligne de séparation remplace alors la ligne existante dans le document texte et la seconde partie est insérée en tant que nouvelle ligne de texte. Ensuite, le stockage temporaire est 'free'd. –