【发布时间】:2018-02-02 17:40:48
【问题描述】:
为什么对于给定的输入,以下代码的答案总是 32?
我预计是 400
代码应该从子进程获取输入并将其传递给父进程并在父进程中打印。
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
int main(){
pid_t p=fork();
if(p>0){
int x=-1;
wait(&x);
printf("sum: %d",x/255);
}else{
int sum=400,i;
int n,x;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&x);
sum+=x;
}
exit(sum);
}
return 0;
}
输入:
4
100 100 100 100
【问题讨论】:
-
你给这个程序提供了什么输入?
-
@lurker 对此感到抱歉...我现在提到了他们
-
printf("sum: %d",x/255);也许你打算x & 0xff? -->>man 2 wait -
我认为你应该使用
WEXITSTATUS(x)而不是x/255。 -
最后我们要注意的是,当你从400开始,加上100,4次,你最终得到800。这就是为什么你的退出代码是
800%256=32,而不是400%256=144