5

该程序首先被分叉,然后由 execlp 运行,它调用程序传入两个数字,一个幂和一个基数。

int main(int argc, char *argv[])
{
    int pid = getpid();
    printf("Calculator Process[%d]: started\n",pid);
    double base, power;
    sscanf(argv[1],"%d",&base);
    sscanf(argv[2],"%d",&power);
    double number = pow(base,power);
    printf("Calculator Process[%d]: %d ^^ %d == %d\n",pid,base,power,number);
    printf("Calculator Process[%d]: exiting\n",pid);
    return 1;
}

假设我传入它的基数 3,幂 5。这就是我得到的:

base = 4263 - 这也恰好是 PID。
功率 = -1
提升权力:714477568

来电线路:

execlp("./calculator","./calculator",argv[1],argv[2],(char*)0);

当我打印 argvs 时,我得到了它们的值(作为 char*,但转换失败)。

任何想法为什么我无法正确读取值?

4

2 回答 2

9

要么读双:

double base, power;
sscanf(argv[1],"%lf",&base);
sscanf(argv[2],"%lf",&power);

或扫描成整数:

int base, power;
sscanf(argv[1],"%d",&base);
sscanf(argv[2],"%d",&power);
于 2012-09-19T15:51:05.873 回答
0

快速调整您的代码应该可以做到:

int main(int argc, char *argv[]) 
{
    int pid = getpid();
    printf("Calculator Process[%d]: started\n",pid);
    double base, power;
    base = atof(argv[1]);
    power = atof(argv[2]);
    double number = pow(base,power);
    printf("Calculator Process[%d]: %f ^^ %f == %f\n",pid,base,power,number);
    printf("Calculator Process[%d]: exiting\n",pid);
    return 1; 

}

  1. 要将 char 数组转换为数字,您可以使用atof()
  2. 不要忘记将 printf 更新为双精度,%f否则它们将不会显示在您的输出中!
于 2012-09-19T16:16:51.150 回答