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

时间:2017-03-22 11:15:00

标签: c pointers command-line-arguments argv

通过交易,我是一名PHP程序员,想要测试编写一个C程序,发送它的参数并使用shell_exec()在PHP中使用它的输出。

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

#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

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

1 个答案:

答案 0 :(得分:4)

问题是,argv[1]argv[n],一般而言)是指向字符串的指针,表示int没有给出相应的整数您可能已将其作为参数传递。

那就是声明的有效性,如

 leftop = (int) argv[1];

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

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