我在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