我的目标是学习如何执行execle()函数。我在Head First C书中找到了这段代码。
这是主程序代码(diner_info.c):
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("Diners: %s\n", argv[1]);
printf("Juice: %s\n", getenv("JUICE"));
return 0;
}
这包含execle()函数(my_exec_program.c):
#include <string.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
char *my_env[] = {"JUICE=peach and apple", NULL};
int main()
{
execle("diner_info", "diner_info", 4, NULL, my_env);
puts(strerror(errno));
return 0;
}
当我编译所有c文件时,我没有收到错误。但是当我运行编译文件(my_exec_program)时,我从my_exec_program得到了这个结果:
Bad address
有人帮助我如何解决这个问题?
答案 0 :(得分:3)
4
被视为指向char
的指针。如果要将{4}作为argv
参数传递,则需要为字符串:"4"
。
答案 1 :(得分:1)
更改此
execle("diner_info", "diner_info", 4, NULL, my_env);
为:
execle("diner_info", "diner_info", "4", (char*)0, my_env);
您希望传递字符串作为参数,而int值4则视为地址。 execle()
所采用的参数的可变数量是所有C字符串,由空指针终止。
注意:使用NULL
时请注意,如果NULL
定义为#define NULL 0
,那么exec*()
可变参数函数将无法正常工作。
相反,为了安全,我会使用(char*)0
代替NULL
。