Я делаю XML-форматтер на C. Это действительно хорошо, но мой предыдущий подход (прямой printf для каждого символа) не выводил бы правильное количество пробелов для каждой строки.Поэтому я создал строковый буфер и realloc
редактировал его каждый раз для печати нового символа.(Я знаю, что это не самое лучшее, но мне все равно.) Новый код не будет очищать буфер или правильно определять новые строки.
void bufprint(char **line, char *poo) {
/*SNIP old code without realloc*/
*line=realloc(*line,strlen(*(line))+1+strlen(poo));
strcpy(*line+strlen(*line),poo);
}
И buf объявляется как char *buf=malloc(1);
.Вызывается bufprint: bufprint(&buf,"<");
.
Код для очистки буфера:
if (new) {
new=False;
int i;
for (i=0; i < level; i++) {
printf(" ");
}
printf("%s",buf);
free(buf);
buf=malloc(1);
printf("\n");
//printf("BUFFER CLEARED! --------------");
//printf("New buffer: %s %d",buf,strlen(buf));
}
Пример вывода:
<
<root>
<root><element num="1">
This is element 1
</element>
</element><element num="2">
This is element 2
<subelement>
<subelement>This is a sub-element
</subelement>
</subelement>Self-closing tag:
<br />
<br /></element>
</root>