我有问题的进程在c代码与argv参数

5vf7fwbs  于 2022-12-03  发布在  其他
关注(0)|答案(1)|浏览(134)

Gcc编译器消息:
passing argument 1 of ‘srand’ makes integer from pointer without a cast [-Wint-conversion]
too many arguments for format [-Wformat-extra-args]
我的代码:

#include<stdlib.h>
#include<unistd.h>
#include<stdio.h>
#include<sys/wait.h>
void main(int argc,int* argv[])
{
    srand(argv[1]);
    srand(argv[2]);
    printf("I am orginal MY PID %d and MY PPID %d \n",getpid(),getppid());
    int pid,x,s,x1;
    pid=fork();
    if (pid!=0)//parent 
    {
        printf("I am parnet and My PID %d and My PPID %d /n",getpid(),getppid());
        for(int i=0 ;i<3;i++){
            s=rand();
            x=s%5;
            sleep(x);
            printf("parent sleep\n",x);
        }
        printf("the parent terminated with PID %d and PPID %d \n",getpid(),getppid());
    }
    else{//child
        printf("i'm a child with PID %d and PPID %d \n" ,getpid(),getppid());
      
        for(int i=0 ; i<3;i++){
            sleep(x1);
            s=rand();
            x1=s%5;
            }
            printf("child sleep \n",x1);
            printf("the child terminated with PID %d and PPID %d \n",getpid(),getppid());

    }
    

}
niwlg2el

niwlg2el1#

对于初学者,函数main应声明为

int main(int argc, char * argv[])

代替

void main(int argc,int* argv[])

在任何情况下,表达式argv[1]argv[2]都有一个指针类型。

srand(argv[1]);
srand(argv[2]);

无效。函数声明如下

void srand(unsigned int seed);

也就是说,它需要整数而不是指针。
在使用argv[1]argv[2]之前,您需要检查argc的值。
并且连续两次调用该函数没有意义。
printf的这些调用中

printf("parent sleep\n",x);
//...
printf("child sleep \n",x1);

您指定的冗余参数xx1在格式字符串中没有对应的转换说明符。
此外,您还使用了未初始化的变量,例如

sleep(x1);

变量x1未初始化。

相关问题