如何在C中实现波浪扩展?

art*_*non 16 c

chdir("~/")似乎不起作用.我是否希望看到字符串并用手代替代字号,还是有更好的方法?

Cai*_*von 17

POSIX提供wordexp(3)执行类似shell的扩展,包括波浪扩展.


FDi*_*off 15

你可以使用wordexp下面的例子

#include <stdio.h>
#include <wordexp.h>

int main(int argc, char* argv[]) {
    wordexp_t exp_result;
    wordexp(argv[1], &exp_result, 0);
    printf("%s\n", exp_result.we_wordv[0]);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果在函数中使用它,则需要添加`wordfree(&exp_result);`以避免泄漏内存. (5认同)

Som*_*ude 7

路径中的波浪号是特定于壳的东西.您可以看到第一个字符是波浪号和斜杠(或字符串的波浪末端),然后将波形符号替换为环境变量的值HOME(您可以从中获取getenv).

如果第二个字符不是斜线,则最有可能形式为~user/path.然后,您必须提取用户名并使用例如getpwnam获取用户的密码条目,其中包含该用户主目录.