在C编程中,如何在mkdir函数中传递类似(“~/test/foo”)的字符串文字?

在C编程中,如何在mkdir函数中传递类似(“~/test/foo”)的字符串文字?,c,arguments,mkdir,C,Arguments,Mkdir,可能重复: 我试图在C程序中创建一个目录,并使用mkdir函数。 我的计划如下: #include <stdio.h> #include <string.h> #define MKDIR(x) mkdir(x) int main() { //If i do mkdir("foo"), the dir is created mkdir("~/test/foo"); //Directory foo not created ins

可能重复:

我试图在C程序中创建一个目录,并使用mkdir函数。 我的计划如下:

 #include <stdio.h>
 #include <string.h>

 #define MKDIR(x)  mkdir(x)

 int main() {

      //If i do mkdir("foo"), the dir is created 

      mkdir("~/test/foo"); //Directory foo not created inside test dir
 }
#包括
#包括
#定义MKDIR(x)MKDIR(x)
int main(){
//如果我执行mkdir(“foo”),则会创建目录
mkdir(“~/test/foo”);//未在test dir内创建目录foo
}
dir foo不是在Test dir中创建的

但我如何才能做到这一点? 谢谢,预先

mkdir()
函数没有展开
~
快捷方式,您必须从
HOME
环境变量中提取值。(参见
mangetenv
)。

检查wordexp:

#包括
#包括
int main(){
wordexp\u t p;
如果(wordexp(“~/”,&p,0)=0{
printf(“%s\n”,p.we_wordv[0]);
wordfree&p;
}                                                                             
返回0;
}   

谢谢您的回复。我使用HOME变量进行了测试。在我必须编写的程序中,我不会在主目录中创建目录,而是在不在主目录中的目标文件夹中创建目录。是否有其他方法可以定义mkdir函数的特定路径而不使用getenv?如果它不在主目录中,则可以指定完整路径,如
“/home/yourcount/test/foo”
作为文本。谢谢,我会测试它,看看它是否对我有效。是的,它有效,我还使用了system(“mkdir/test/foo”)来创建一个dir.Is system()函数比mkdir()慢。当然,您可以运行
mkdir-p
,但如果目录名包含空格或更糟糕的内容,您必须转义目录名。当然,您可以使用
exec*
运行
mkdir
,但老实说,我认为逐个创建目录(如果您确实需要
-p
)更容易。简言之,如果你是用c语言写的,那就用c语言写吧。非常感谢你的编码
#include <wordexp.h>                                                            
#include <stdio.h>                                                              
int main() {                                                                    
  wordexp_t p;                                                                  
  if (wordexp("~/", &p, 0)==0) {                                                
    printf("%s\n", p.we_wordv[0]);                                              
    wordfree(&p);                                                               
  }                                                                             
  return 0;                                                                     
}