我想知道这是concatenate
和NUL
终止字符串(包括宽度)的正确方法。
#define FOO "foo"
const char *bar = "bar";
int n = 10;
float f = 10.2;
char *s;
int l;
l = snprintf (NULL, 0, "%-6s %-10s %4d %4f",FOO, bar, n, f);
s = malloc (l + 4); // should it be the number of formats tags?
if (s == null) return 1;
sprintf (s, "%-6s %-10s %4d %4f", FOO, bar, n, f);
答案 0 :(得分:1)
相当多的系统在其标准C库中都有一个函数asprintf
,它完全按照您的操作执行:allocate和sprintf
。
答案 1 :(得分:0)
您只需要将1
添加到snprintf()
返回的值,因为只添加了一个空终止符。
但是,您需要检查l == -1
(表示snprintf()
失败)。