回答
sizeof()
函数不会评估括号中的内容:它会查看类型并返回大小。这是绝对安全:
char *ptr = NULL; // NULL ponter!
printf("%d", sizeof(*ptr));
它将返回1
,因为它不必计算表达式就知道答案了。
“这非常安全:” - >不是真的。 sizeof'的结果类型是'size_t'。匹配的'printf()'说明符是'“%zu”',而不是'“%d”'。 – chux
因为getchar()
返回类型是int
而不是char
。 sizeof(int)
在您的平台上是4。
此外,您应该使用%zu
来打印size_t
值。使用不正确的格式说明符在技术上是undefined behaviour。
我期望的是,1.类型输入。 2.读取输入并返回输入值。 3.评估sizeof值4.打印sizeof值。
但是第一步从未发生。为什么不迈出第一步?
因为除极少数例外情况,sizeof
运算符不会评估其操作数。您的使用情况不是例外情况之一。未评估getchar()
表示getchar()
未被调用。
无论如何,我不确定你期望从你的代码中得到什么。即使调用getchar()
为,结果总是具有相同的类型(int
),它不依赖于输入。
也请关注@P.P.的评论。您的printf()
格式与正在打印的数据类型不匹配,size_t
。正如他所观察到的,printf()
调用的结果是未定义的行为。
在C中,sizeof运算符仅在运行时对可变大小数组(VLA)进行评估。在所有其他情况下,操作员不会评估操作数。它推导出表达式的类型并返回推导类型的对象的大小。
- 1. 为什么不按预期工作set_time_limit?
- 2. Javascript未按预期工作,为什么?
- 3. 为什么setTimeout不按预期工作?
- 4. 为什么不按预期.when.apply $工作
- 5. 为什么memset不按预期工作?
- 6. 为什么:lt()不按预期工作?
- 7. incPixel为什么不按预期工作?
- 8. 为什么EF预加载包括不按预期工作?
- 9. 为什么QMultiMap的查找操作无法按预期工作?
- 10. 为什么这个string.search不能按预期工作?
- 11. Maven-scm插件:为什么scmRevision无法按预期工作?
- 12. 这些正则表达式为什么不按预期工作?
- 13. 为什么正则表达式没有按预期工作?
- 14. 为什么该查询不能按我的预期工作?
- 15. 为什么PUN不回拨? ProtonNetworking没有按预期工作
- 16. 为什么返回-1不能按预期工作
- 17. 为什么要清楚:没有按预期工作
- 18. 为什么angular.isNumber()不能按预期工作?
- 19. 为什么.on()按预期在jquery中不能正常工作?
- 20. 为什么不是“<= 1”按预期工作?
- 21. 为什么stopifnot不能按预期工作?
- 22. 为什么std :: nothrow在gcc(4.9)中按预期工作?
- 23. 为什么此规范不能按预期工作?
- 24. 为什么CSS:不是伪类不能按预期工作?
- 25. 为什么indexOf无法按预期工作?
- 26. 为什么sched_setaffinity在kthread上按预期工作
- 27. 为什么pygame.key.get_pressed按预期工作不正常?
- 28. 为什么此密码检查不能按预期工作?
- 29. 为什么我的情况没有按预期工作?
- 30. 为什么此代码无法按预期工作?
我得到这个:[ICS @蒸汽男孩ics_client] $ gcc的-o临时temp.c [ICS @蒸汽男孩ics_client] $ ./temp 4 [ICS @蒸汽男孩ics_client] $什么平台是你吗? – octopusgrabbus
你也应该在你的格式化字符串的末尾添加一个'\ n'。 –