【发布时间】:2019-08-19 05:18:27
【问题描述】:
我想做一些事情
char* a = "/data/cc/dd/ee/ff/1.jpg";
然后得到
char* b = "/data/cc/dd/ee/ff/json_1.json";
或
char *b = "/data/cc/dd/ee/1.txt";
在 Python 中这很容易,但不幸的是我必须在 C 中做到这一点。 我做了类似的事情:
Ubuntu C
char classpath[4096];
char *dirc, *basec, *bname, *dname;
find_replace(path, ".jpg", ".txt", classpath);
dirc = strdup(path);
basec = strdup(path);
dname = dirname(dirc);
bname = basename(basec);
我知道下一步应该连接dname、'json_' 和bname
可能首先创建最终路径,例如 char ressultpath[4096];
然后使用strcat(),但我想知道什么是使用更少内存和更快的更好方法,因为我真的不熟悉C。
【问题讨论】:
-
请注意,
strdup、dirname和basename是在 IEEE POSIX(标准化类 Unix 操作系统的文档)中定义的特定于平台的函数,而不是 ISO C。strdup已被在 POSIX 中使用了 30 年,但dirname和basename较新;它们是在 2008 年左右的第 4 期中添加的。 -
dirname()和basename()都在 SUS 1997 中,并且可以在许多系统上更快地使用它们,就像它们在 SVR4 和 SVID 中一样。它们也被记录在POSIX 2004 中——basename()和dirname()。