通过交易,我是一名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
。
为什么我得不到正确的结果?
答案 0 :(得分:4)
问题是,argv[1]
(argv[n]
,一般而言)是指向字符串的指针,表示int
没有给出相应的整数您可能已将其作为参数传递。
那就是声明的有效性,如
leftop = (int) argv[1];
是严重依赖于实现的,因为指针到整数转换的有效性是特定于实现的行为。在某些情况下,它会导致undefined behavior。
解决方案:您应该使用strtol()
将字符串转换为整数类型。