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

Popular posts from this blog

Sort a complex associative array in PHP -

vb.net - How to ignore if a cell is empty nothing -

recursion - Can every recursive algorithm be improved with dynamic programming? -