c - splitting one line into two when creating a Text Editor -
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; } this code used split 'loc.line_no'th line in 'document' @ 'loc.idx'th character 2 parts, having hard time following code fourth line of function. please me follow each line of code does.
here:
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); we dynamically allocated temporary space, in our operations take place. notice origline context initialized loc.line_no-th line of document.
now read strncpy(), , proceed.
newline = strncpy(newline, origline, loc.idx); copy first loc.idx characters of origline newline.
newline[loc.idx] = '\0'; null-terminates string newline.
likewise, this:
nextline = strncpy(nextline, origline+loc.idx, strlen(origline)-loc.idx); nextline[strlen(origline)-loc.idx] = '\0'; will copy first strlen(origline)-loc.idx characters of substring of origline, begins @ loc.idx-th index, nextline.
so these 2 parts copying 2 parts of splitted line temporary locations (which valid inside function).
these:
document_set_line(document, loc.line_no, newline); document_insert_line(document, loc.line_no+1, nextline); are custom made function, not shown here, can guess first part of splitted line replaces existing line in document, , second part inserted in next line, new line.
this part:
free(newline); free(nextline); free(origline); newline = null; nextline = null; origline = null; is de-allocating dynamic memory malloc() , strdup() allocated, , set pointers null, safety reasons.
Comments
Post a Comment