sizeof()运算符

时间:2017-10-13 12:13:53

标签: c sizeof format-specifiers

answered一个question,如果使用了错误的格式说明符,那么代码的行为是未定义的。

在该问题中,OP使用%lu运算符的sizeof格式说明符。

printf("%lu \n", sizeof(*"327"));

但是,我得到了一些评论,%lu而不是UB代码。

那么,sizeof(*"327")是否属实?

2 个答案:

答案 0 :(得分:1)

sizeof运算符返回size_t类型。该类型的正确格式说明符是%zu

如果您使用%lu打印size_t,则可能会有效,也可能无效,具体取决于size_t是否大于long。如果size_t较大,则表示未定义行为,如果行为未明确定义。当然,你无法确切地知道。

最好使用特定于该类型的正确格式说明符。

答案 1 :(得分:1)

Unix系统(差不多?)总是有size_t == unsigned long == uintptr_t,并且有一个很多的代码依赖于这个事实。

唯一常用的系统是64位Windows,其中unsigned long是32位但size_tuintptr_t是64位。

(Windows是否支持%zu中的printf?)