Tag: overflow

如果我输入一个等于INTMax + 1的数字,计算机不会返回-1

int类型的长度是4个字节,我在Ubuntu下用C编写了一个小程序来打印我刚刚输入的数字。 当我输入2147483648,即2 ^ 31时,它打印2147483647而不是-1。 当我输入任何大于2147483647的数字时,会发生同样的事情。为什么它不会溢出到-1,因为我学习了表格书,但似乎被截断为INT_Max并且在比特级别发生了什么? #include int main(){ int x; scanf(“%d”,&x); printf(“%d\n”,x); } 我犯了一个错误。 INT_Max + 1应等于INT_Min。 我修改了代码: #include int main(){ int x=2147483647; int y=x+1; printf(“%d”,y); } 输出是-2147483648现在我只是想知道当我调用函数scanf时发生了什么? 我认为它将所有大于2147483647的输入数字截断为2147483647。

INT_MIN%-1是否会产生未定义的行为?

gcc生成浮动代码,为以下代码引发SIGFPE : #include int x = -1; int main() { return INT_MIN % x; } 但是,我在标准中找不到此代码调用未定义或实现定义的行为的语句。 据我所知,它需要返回0.这是gcc中的错误还是我错过了标准所做的一些特殊例外?

sprintf函数的缓冲区溢出?

{ char buf[8]; sprintf(buf,”AAAA%3s”,”XXXXXXXX”); printf(“%s\n”,buf); } 会发生什么? 缓冲区有8个字符空间,只剩下3个空闲字符,但“XXXXXXXX”长度为8个字符。 我在Windows 7上使用Visual Studion 2008进行测试。结果,打印的程序:AAAXXXXXXX,发生了运行时错误。