随机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;
这里args
是char (*)[]
型,这是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);
}
附加:
当您运行您的程序,您必须为type
,name
和rand_num
会得到相同的价值观。您可能需要在每次运行程序时更改随机数,并使用srand()和srandom()。
以上是 随机char * args []传递给execv 的全部内容, 来源链接: utcz.com/qa/264790.html