我在C中制作一个XML格式化程序。它非常好,但是我以前的方法(在每个字符处直接输入printf)不会为每行打印适当的空间量。因此,我做了一个字符串缓冲区,并且每次都打印一个新字符。 (我知道这不是最好的,但我不在乎。)新代码不会清除缓冲区或正确检测换行符。缓冲的字符串损坏
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>
您是否曾在执行buf = malloc(...)后将buf [0]初始化为'\ 0'?如果不是,strlen(buf)可能会崩溃或返回一个长度,大于分配给buf的内存。 –
我正确地阅读你的问题 - 你期待免费/ malloc来“清除”一个缓冲区?如果是这样,恐怕这在C中不起作用; malloc'd mem需要初始化。 – belwood