【发布时间】:2011-01-08 17:03:37
【问题描述】:
我想在 C 中打印出 size_t 类型的变量,但似乎 size_t 在不同架构上被别名为不同的变量类型。例如,在一台机器(64 位)上,以下代码不会引发任何警告:
size_t size = 1;
printf("the size is %ld", size);
但在我的另一台机器(32 位)上,上面的代码会产生以下警告消息:
警告:格式 '%ld' 需要类型 'long int *',但参数 3 有类型 'size_t *'
我怀疑这是由于指针大小的不同,所以在我的 64 位机器上 size_t 别名为 long int ("%ld"),而在我的 32 位机器上 size_t 是别名为另一种类型。
是否有专门针对size_t 的格式说明符?
【问题讨论】:
-
您的警告信息与代码不匹配。警告提到了指针,你的代码没有。您是否在某处删除了一些
&? -
指针?不,我没有收到任何关于指针的警告,实际上取决于我在哪台机器上运行该代码,有时我根本没有收到任何警告。试试下面的测试代码:#include
int main(){ size_t size = 1; printf("大小为 %ld", size);返回0; } -
@EthanHeilman 他指的是你的警告说
warning: format '%ld' expects type 'long int *', but argument 3 has type 'size_t *',而它可能应该说warning: format '%ld' expects type 'long int', but argument 3 has type 'size_t'。当您收到这些警告时,您是否使用了scanf()?
标签: c platform-independent size-t format-string format-specifiers