これがconcatenate
とNUL
に適切な方法であるかどうかは、幅を含む文字列を終了させることです。文字列とsnprintfを連結して
#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);
メンテナンスの目的で、 'snprintf'と' sprintf'の両方で使用される1つのフォーマット文字列を定義することをお勧めします。それは1つの場所ではなく、他の場所で変更された場合は本当に吸うだろう! –
これは良いアイデアのように思えますが、これに関連してサンプルコードを投稿することは可能でしょうか?ありがとう – Lucas
'const char * fmt_str ="%-6s%-10s%4d%4f ";'のようなものを宣言し、両方の場所でフォーマット文字列として使用してください。 –