为什么sizeof不能按预期工作?

时间:2016-07-29 13:51:23

标签: c printf sizeof

responseString = Optional({"success":false,"msg":"Invalid Method"})

我期待的是,
1.输入输入。
2.读取输入和返回输入值 3.评估价值的大小。
4.打印sizeof值。

但第一步永远不会发生。

为什么第一步不会发生?

4 个答案:

答案 0 :(得分:4)

sizeof运算符不会计算其操作数,除非它的类型是可变长度数组类型:它查看类型并返回大小。这非常安全:

char *ptr = NULL; // NULL ponter!
printf("%zu", sizeof *ptr);

它将返回1,因为它不必评估表达式以了解答案。

答案 1 :(得分:2)

  

我的期望是,1。输入输入。 2.读取输入和返回输入值。 3.评估值的大小4.打印sizeof值。

     

但第一步永远不会发生。为什么第一步不会发生?

因为除了极少数例外,this.updateStyles();运算符不会计算其操作数。您的使用不是例外情况之一。不评估sizeof意味着不会调用getchar()

无论如何,我不确定您对代码的期望。即使getchar() 调用,结果也始终具有相同的类型(getchar()),这不依赖于输入。

还要注意@ P.P.的评论。您的int格式与正在打印的数据类型printf()不匹配。正如他所观察到的那样,size_t调用因此具有未定义的行为。

答案 2 :(得分:1)

因为getchar()返回类型是a,而不是int。 <{1}}在您的平台上为4。

此外,您应该使用char来打印sizeof(int)值。在技​​术上使用不正确的格式说明符undefined behaviour

答案 3 :(得分:1)

在C中,sizeof运算符仅在运行时针对可变大小数组(VLA)进行评估。在所有其他情况下,运算符也不会评估其操作数。它推导出表达式的类型,并返回推导类型的对象大小。