當輸出緩衝區可能不足以容納格式化的字符串時,snprintf
函數是完美的。但是如果由於緩衝區長度不足而導致snprintf
的呼叫停止,如何繼續打印到另一個緩衝區?如果snprintf在格式說明符中停止,如何繼續?
char buf1[16] = {0};
char buf2[16] = {0};
int n = snprintf(buf1, sizeof buf1, "Lorem ipsum %d dolor sit", 123456);
assert(strcmp(buf1, "Lorem ipsum 123") == 0); // ok
// Insert solution here
assert(strcmp(buf2, "456 dolor sit") == 0); // expected result
P.S.我沒有對snprintf
感興趣,任何限於標準C庫的解決方案都可以。
你有沒有研究過'n'值? – 2015-04-03 19:19:23
@MooingDuck當然,這就是爲什麼我把它放在片段中。我知道成語首先用'n = 0'調用'snprintf'來確定長度,然後分配足夠大小的緩衝區,然後進行真正的打印。我的問題是,是否有一種方法可以在不分配額外緩衝區的情況下從'snprintf'停止的地方恢復。 – 2015-04-03 19:33:38