为什么我的整数值不能在 C 中正确显示或计算?

Why are my integer values not being displayed or calculated correctly in C?

顺便说一句,我是一名 PHP 程序员,我想测试编写一个 C 程序,向它发送参数并使用它在 PHP 中使用 shell_exec() 的输出。

无论如何,我写这段代码只是为了将两个数字加在一起:

#include <stdio.h>

int leftop, rightop, result;

int main(int argc, char *argv[])
{
    leftop = (int) argv[1];

    rightop = (int) argv[2];

    result = leftop + rightop;

    printf("The result of %i add %i = %i\n", leftop, rightop, result);
    getchar();
    return 0;
}

我用 MinGW 使用 gcc -o main.c mycprogram.exe 编译它。

当我 运行 程序(使用 shell_exec() (php) 或从命令行)时,我得到以下结果。

./mycprogram.exe 25 25

The result of 7150824 add 7149184 = 14300008

然后我 运行 再次得到:

The result of 6692040 add 6692072 = 13384112

显然我希望结果是 50

为什么我没有得到正确的结果?

问题是,argv[1](一般来说,argv[n])是一个指向 string 的指针,但 int 不是给你相应的整数,你可能已经作为参数传递了。

也就是说,像

这样的陈述的有效性
 leftop = (int) argv[1];

在很大程度上依赖于实现,因为指针到整数转换的有效性是实现特定的行为。在某些情况下,它会导致 undefined behavior.

解决方法:你应该使用strtol()字符串转换为整数类型。