为什么我的整数值不能在 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()
将字符串转换为整数类型。
顺便说一句,我是一名 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()
将字符串转换为整数类型。