C++ 这个设置有什么问题?

C++ 这个设置有什么问题?,c++,parameters,C++,Parameters,我创建了一个名为test的程序: #include<stdlib.h> #include<iostream> int main() { std::cout<<system("..\\add\\debug\\add.exe 4 8"); while(true); return 0; } #包括 #包括 int main() { std::cout问题在于您正在将指针值转换为整数。参数将作为C样式字符串(const char*)传递给您的

我创建了一个名为test的程序:

#include<stdlib.h>
#include<iostream>
int main()
{
    std::cout<<system("..\\add\\debug\\add.exe 4 8");
    while(true);
    return 0;
}
#包括
#包括
int main()
{

std::cout问题在于您正在将指针值转换为整数。参数将作为C样式字符串(
const char*
)传递给您的程序。您需要首先使用类似atoi的API将其转换为字符串

#include<stdlib.h>
int main(int argc,char *argv[])
{
    int n= atoi(argv[1]);
    int m= atoi(argv[2]);
    return(n+m);
}
#包括
int main(int argc,char*argv[])
{
int n=atoi(argv[1]);
int m=atoi(argv[2]);
返回(n+m);
}
编辑


正如其他人所指出的,您还应该进行一些错误检查,以确保实际上有两个参数传递给程序。

您的add.exe将字符串指针强制转换为无符号整数,因此它是在内存中添加它们的位置,而不是数字


使用sscanf(或者,正如另一个答案中所建议的,使用atoi-可能更容易)。

这可以作为玩具,但作为参考,您不能指望能够从main()返回完整的整数范围。首先,system()使用各种值作为哨兵(-1和127,例如)因此,您无法区分执行失败与其中一个值的合法结果之间的区别。其次,Shell可能会将返回值的范围限制为仅8位(使用剩余的位作为附加状态信息)。

关于使用atoi()或sscanf()转换argv[]从字符串到实际整数的元素是正确的

但是,您的测试用例还有另一个问题。
system()
的返回值是运行的进程的退出状态,这有点依赖于平台。但是,在大多数平台上,事情的安排是这样的:值
0
表示命令运行正常,并最终调用
exit(0)
本身。Windows符合这一点


coutYou可能还需要在程序中进行一些错误检查,以确保已将2个参数实际传递给程序。类似于…if(argc==3)…在开始时可以工作。当我使用atoi(argv[1])时,我得到“error C2664:'atoi”:无法将参数1从'char**'转换为'const char*”@Keand64,请重试该示例。您的原始示例在主方法上有一个错误的签名(太多*`s),我未经检查就复制了它。
#include<stdlib.h>
int main(int argc,char *argv[])
{
    int n= atoi(argv[1]);
    int m= atoi(argv[2]);
    return(n+m);
}