当输出缓冲区可能不足以容纳格式化的字符串时,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