gpt4 book ai didi

c - 在 C 中使用 getopt_long 的文件路径无效

转载 作者:行者123 更新时间:2023-11-30 15:40:17 25 4
gpt4 key购买 nike

我想知道为什么optarg在以下情况下返回无效路径:--foo=~/.bashrc但如果我在 --foo ~/.bashrc 之间留一个空格,则不会。

解决方法是什么,以便它适用于这两种情况。

#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>

int main(int argc, char *argv[]) {
int opt = 0;
int long_index = 0;
char *f;
static struct option longopt[] = {
{"foo", required_argument, 0, 'd' },
{0,0,0,0}
};
while ((opt = getopt_long(argc, argv,"d:", longopt, &long_index )) != -1) {
switch (opt) {
case 'd' :
printf("\n%s\n", optarg);
f = realpath (optarg, NULL);
if (f) printf("%s\n", f);
break;
default:
exit(1);
}
}
return 0;
}

输出:

$ ./a.out --foo=~/.bashrc
~/.bashrc

$ ./a.out --foo ~/.bashrc
/home/user/.bashrc

最佳答案

发生这种情况是因为“波形符扩展”是由 shell 执行的:它本身不是有效的路径。仅当波浪号 ~ 位于字符串参数的开头时,它才会扩展为主目录,这看起来像路径。例如:

$ echo ~
/home/sigi
$ echo ~/a
/home/sigi/a
$ echo ~root/a
/root/a
$ echo ~a
~a
$ echo a/~
a/~

如果您也想在第一种情况下提供此功能,而 shell 无法帮助您,或者更一般地说,shell 使用的单词扩展,您可以找到自己执行此操作所需的所有信息this reference .

关于c - 在 C 中使用 getopt_long 的文件路径无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21065946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com