随机char * args []传递给execv

我需要创建一个char *数组[],然后我必须传递给execv。随机char * args []传递给execv

  • 第一元件将是路径 “./exec_test”
  • 作为第二个参数:A/B
  • 之间随机选择的第三个参数:选择一个随机字母A - Z
  • 对于第四个参数:挑[2,2 + A_CONST]
  • 然后NULL之间的随机整数

    void perform_exec(){ 

    char *type= 'A' + (random() % 2);

    char *name= 'A' + (random() % 64);

    int rand_num= rand();

    char *args[5];

    args[0]= "./test_exec";

    args[1]= name;

    args[2]= type;

    args[3]= rand_num;

    args[4]= NULL;

    execv(args[0], args);

    printf("you souldn't see this. exec error\n");

    exit(EXIT_FAILURE);

    }

我知道这段代码有一些可怕的错误,但实际上并没有弄清楚它是什么。

我收到错误#014:错误的地址。

回答:

i get Error #014: Bad address.

的错误信息是非常明确的,你的程序试图使用无效的地址。

errno 14代表EFAULT。您访问的地址空间之外

从execve

EFAULT

名点。

你的程序是抛出这个错误,因为这些语句:

args[1]= name; 

args[2]= type;

args[3]= rand_num;

这里argschar (*)[]型,这是char指针数组。 因此,您正在为char指针指定整数类型值,编译器必须为此给出警告。

execv()访问的参数传递给它,它给Bad address错误,因为它正在考虑args[1]name),args[2]type)和args[3]rand_num)的地址,并在这是无效的地址试图访问值。

你可以这样做:

void perform_exec(){ 

char type= 'A' + (random() % 2);

char name= 'A' + (random() % 64);

int rand_num= rand();

char *args[5];

args[0]= "./test_exec";

args[1] = malloc (2 * sizeof(char)); //2 as it is either A or B

args[1][0] = type;

args[1][1] = '\0';

args[2] = malloc (2 * sizeof(char)); //2 as it is a character

args[2][0] = name;

args[2][1] = '\0';

args[3] = malloc (11 * sizeof(char)); //11 as INT_MAX is having 10 digits

snprintf (args[3], 11, "%d", rand_num);

args[4]= NULL;

execv(args[0], args);

perror("execv failed:");

free(args[1]);

free(args[2]);

free(args[3]);

exit(EXIT_FAILURE);

}


附加:

当您运行您的程序,您必须为typenamerand_num会得到相同的价值观。您可能需要在每次运行程序时更改随机数,并使用srand()和srandom()。

以上是 随机char * args []传递给execv 的全部内容, 来源链接: utcz.com/qa/264790.html

回到顶部