0

例如:

#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argv)
{
    int a = (int) strtol(argv[1], (char**) NULL, 10);
    int b = (int) strtol(argv[2], (char**) NULL, 10);

    printf("%d %% %d = %d\n", a, b, a % b);
    return (0);
}

(程序将这些值作为命令行参数,因为当硬编码时,我认为在编译时-2147483648 % -1会被替换)0

-2147483648分别使用和-1作为第一个和第二个参数运行这个简单的程序会引发一个 SIGFPE。为什么会这样?还有其他类似的特殊情况吗?我怎样才能避免它?

谢谢!

4

0 回答 0