【发布时间】:2016-10-10 17:33:43
【问题描述】:
以下代码的 sn-p 没有按我的预期工作,当在 Ubuntu 机器上使用 GCC 编译时,以下程序的输出是“S is Bigger”。虽然变量 s 是 -1 并且明显小于 sizeof(buffer) 20。但它仍然打印 S is Bigger。
我能做出的唯一合乎逻辑的假设是 C 将变量“s”转换为无符号整数并在“If”条件下使用。 如果我的假设是正确的,为什么 C 会这样做,或者如果我错了,为什么这个 sn-p 会给出这种令人困惑的输出。
#include <stdio.h>
int main(void) {
int s = -1;
char buffer[20];
if(s > sizeof(buffer)){
printf("S is Bigger");
}
return 0;
}
【问题讨论】:
-
sizeof(buffer)会给你指针的大小,在 32 位机器上是 4 -
@MaxB
buffer是数组而不是指针。 -
整数提升。不要比较有符号和无符号。或投其中之一。你的编译器应该警告有符号和无符号之间的比较。
-
参见:stackoverflow.com/questions/2084949/arithmetic-operations-on-unsigned-and-signed-integers。
-
是的,但是,缓冲区大小怎么可能小于
-1?
标签: c if-statement int sizeof