4

printf根据我的说法,原型stdio.h

extern int printf (const char *__restrict __format, ...);

在解释Restrict的页面上,它说它是一个关键字,用于指示指针是唯一的。但是,我不明白为什么有人需要它printf

为什么printf有一个“限制”关键字?

如果有必要进一步解释“限制”是什么意思,请做。

4

1 回答 1

1

基本上,格式字符串不应与其任何参数重叠,否则结果未定义。除了restrict在文档中提到它之外,它还清楚地说明了这一点。

至于为什么...

在这种情况下,snprintf()格式sprintf()不应该与特别是目标缓冲区重叠的原因应该很明显,但是对于输出到文件的变体来说,它有点模糊。

怀疑这是因为说明%hhn符将其参数 a 设置signed char *为到目前为止写入的字符数。如果您将指针传递给格式字符串的元素,这将修改字符串,从而可能引入未定义的行为 - 如果数字对应于字符的值'%'怎么办?

于 2019-05-08T02:57:47.790 回答