在Linux上,它返回将要打印的字符数。
这是标准化行为吗?
答案 0 :(得分:8)
是
来自 7.21.6.5 snprintf功能,N1570(C11草案):
snprintf函数等效于fprintf,输出除外 写入数组(由参数s指定)而不是a 流。 如果n为零,则不写入任何内容,s可能为null 指针即可。否则,超出n-1的输出字符是 丢弃而不是写入数组,以及空字符 写在实际写入的字符末尾 阵列。如果在重叠的对象之间进行复制,则 行为未定义。
这是一种有用的方法,可以找到未知数据的长度,您可以先找到所需的长度,然后分配确切的内存量。典型的用例是:
@Component({
selector: 'price-box',
template: `
<price-box [(val)]="price"></price-box>
`
})
export class stepOne {
price = '200';
}
答案 1 :(得分:3)
根据snprintf(3),它由POSIX&amp;标准化。由C99。该手册页也说:
Concerning the return value of snprintf(), SUSv2 and C99 contradict each other: when snprintf() is called with size=0 then SUSv2 stipulates an unspecified return value less than 1, while C99 allows str to be NULL in this case, and gives the return value (as always) as the number of characters that would have been written in case the output string has been large enough. POSIX.1-2001 and later align their specification of snprintf() with C99.
所以int i=snprintf(NULL, 0, "
some-format-string ",
.... );
应该在i
失败后输入负数,或者成功时的非负输出大小。
(如果输出大小大于{{1>} 非常异常,我不知道会发生什么;我想这将是一个失败案例)< / SUP>