所以关注:
$file_type = mime_content_type($_FILES['img']['tmp_name']);
if($file_type == 'text/plain'){
echo "file type is text";
}
?>
<form action="#" method="post" enctype="multipart/form-data">
<input type="file" name="img">
<input type="submit" value="Submit">
</form>
不是未定义的行为,因为244可以放在double t = 244.233;
int a = (int) t;
里面我做对了吗?
否则,如果它是较大的值而不是244不适合int内部,这将是未定义的,我是否做对了?
我对C如何做到这一点更感兴趣。但在这种情况下,是否存在与C ++相同的区别?
答案 0 :(得分:6)
来自[conv.fpint]:
浮点类型的prvalue可以转换为整数类型的prvalue。转换截断; 也就是说,丢弃小数部分。如果截断值不能,则行为未定义 以目的地类型表示。
因此,例如,将66666.66转换为int16_t
将是未定义的行为,但转换66.66
就好了。
答案 1 :(得分:5)
来自我最喜欢的documentation:
浮点类型的prvalue可以转换为任何整数类型的prvalue。小数部分被截断,即,小数部分被丢弃。 如果值无法适应目标类型,则行为未定义(即使目标类型未签名,模运算也不适用)。
是的,你是对的。 (对于C ++,但有人已经为C发布了几乎相同的标准报价
答案 2 :(得分:3)
如果整数部分不能用整数类型表示,则在C中有未定义的行为。
(C11,6.3.1.4p1) “当实数浮点类型的有限值转换为_Bool以外的整数类型时,小数部分被丢弃(即,该值被截断为零)。如果整数部分的值不能用整数类型表示,行为未定义.61“
C ++中的类似写法,C ++ 11,4.9p1。