如何在参数字符串中包括变量名,例如:execlp(“ls”、“ls”、“ls”、“variable”name、“Null”);?

如何在参数字符串中包括变量名,例如:execlp(“ls”、“ls”、“ls”、“variable”name、“Null”);?,c,exec,execv,C,Exec,Execv,基本上,我想在exec相关参数的字符串中包含变量,所以如果我们有: char myname[1024]; myname[1024] = "Michael"; 然后,当我调用execlp时,我希望我的名字被注入其中,以便程序将“/home/variable”视为“/home/Michael”: 在c#中,我们可以只使用“+variable_name+”,但在这里,加号被视为二进制运算符,转义引号不适合我…正如注释中提到的@TomKarzes,您可以使用 char a[2000]; sprintf

基本上,我想在exec相关参数的字符串中包含变量,所以如果我们有:

char myname[1024];
myname[1024] = "Michael";
然后,当我调用execlp时,我希望我的名字被注入其中,以便程序将“/home/variable”视为“/home/Michael”:


在c#中,我们可以只使用“+variable_name+”,但在这里,加号被视为二进制运算符,转义引号不适合我…

正如注释中提到的@TomKarzes,您可以使用

char a[2000]; sprintf(a, "/home/%s", myname);
然后将
a
作为
execlp
的参数

另一个问题是您错误地分配给
myname
。使用此选项可以消除该错误:

char myname[1024] = "Michael";

但是,查看用户主目录的另一种(可能更好)方式是(假设您没有将其硬编码给名为
Michael
)的用户):


这将使用
getenv
函数获取用户的主目录,并将
Null
更改为
(char*)Null
,以便更清晰。

声明
char
数组,使用
sprintf
在该数组中构造所需字符串,然后使用数组调用
execlp
@TomKarzes:ok,但是我可以直接在execlp中输入这个字符数组的名称吗,比如:execlp(“arrayname”)…顺便说一句:如果execlp不是最好的函数,那么我可以使用execve或其他更简单的函数来处理系统级的事务,如cat、ls和其他。@TomKarzes抱歉,不管我现在得到了它,你的意思是简单的“concatane”我知道C不使用“字符串”,但为了简单起见,我使用了这个词……让我们看看。你可以做一些类似于
char a[2000];sprintf(a,“/home/%s”,myname)的事情
然后你可以使用
a
作为
execlp
的参数。这应该足以让你明白。这正是支持
+
字符串连接的高级语言在内部所做的。C是较低级别的,你必须自己做。是的,我现在得到了,谢谢,显然我已经声明了“Michael”也是错误的,因为我现在从gcc得到的是“从数组类型的表达式赋值”,但无论如何,我得到了它,我将“myname”指向“a”,就像在您的示例中一样,并且总体上得到了所有内容。
char myname[1024] = "Michael";
execlp("ls","ls",getenv("HOME"),(char *)NULL);