この1行のコードのために、私は髪を引っ張っています。エクストラにメモリを動的に割り当てない場合(char extra [* cur_size + 1];を使用するだけで)、vsprintfがスタックします。
char *append(char *str, int *cur_size, char *fmt, ...) {
va_list args;
va_start(args, fmt);
int len = vsnprintf(NULL, 0, fmt, args) + strlen(str);
if (len > *cur_size) {
//alloc more memory
*cur_size = len * sizeof (char) << 1;
char *extra = malloc(*cur_size+1);
// char extra[*cur_size+1]; will cause problem
strcpy(extra, str);
str = extra;
}
vsprintf(eos(str), fmt, args);
va_end(args);
LOGE("len = %d, cur_size = %d", len, *cur_size);
return str;
}