我试图将终端中的三个参数传递给一个名为replace的函数。我想知道是否可以从终端
执行以下操作 % ./replace d DDD mytest.tx
我已经在线查看,但只能找到有关将值直接传递给main()而不是内部函数的信息。
编辑:我编辑了以下主要功能:
void replace(char* string_a, char* string_b, char* string_f)
{
}
int main(int argc, char *argv[])
{
if(argc < 4)
{
printf("Not enough arguments\n");
return 0;
}
replace(argv[1],argv[2],argv[3]);
}
答案 0 :(得分:5)
答案 1 :(得分:2)
当然可以,主要原型是int main(int ac, char **av)
,其中ac是传递给程序的参数数量,char **是包含传递给程序的参数的数组数组。
例如代码:
int main(int ac, char **av)
{
void replace (av[1], av[2], av[3])
{
.......
}
}
如果你将exec发布为:./replace d DDD mytest.tx
,av [0]将是你的程序名称,av [1]将是d
,av [2] DDD
和av [ 3] mytest.tx
答案 2 :(得分:1)
所有独立的C语言程序都在main()
开始执行。这就是语言的运作方式。
所以你需要做的是在验证和解释参数后从replace()
调用main()
。命令行参数将位于int argc, char *argv[]
的标准main()
参数中。
答案 3 :(得分:1)
你想要做的是使用main
的参数列表。
您可以使用以下签名:
int main(int argc, char* argv[])
,其中argv是指向参数列表的指针,从命令行传递。
答案 4 :(得分:1)
查找argc
和argv
。
argc是参数的数量,argv是指向参数的指针数组。
所以你的代码应该是这样的:
void replace (char string_a[],char string_b[], char string_f[])
{
//...
}
int main(int argc, char *argv[])
{
if(argc < 4)
{
printf("Not enough arguments\n");
return 0;
}
replace(argv[1], argv[2], argv[3]);
}
还要记住,argv(argv[0]
)中的第一项是执行程序的路径。
答案 5 :(得分:1)
回答您的确切问题:
I am trying to pass three arguments from terminal into a function called replace.
不,你不能绕过将参数发送给main。
定义了C语言,它会在程序中查找main()
个入口点,如果没有,则会抱怨。由于预期main()
存在,因此它将用作任何命令行参数的入口点:
[void | int] main(int argc, char *argv[])
其中argc
是命令行参数的数量,argv[]
是一个字符指针数组(参数列表的“字符串”版本)
如果你想传递它们来替换你真的只需直接发送它们:
int main(int argc, char *argv[]){
if argc is big enough to satisfy
replace(argv's)
如果您真的不希望main()
知道您需要将这些参数存储在文件中,或者在stdin
函数的replace()
运行时获取它们。
如果您试图将“替换”作为主要功能,那么如果您的链接器允许您定义入口点,那么这是可能的。
再次......不确定你的目标是什么。