我想使用POSIX的basename
函数(而不是GNU的)。
从手册中可以得知:
dirname()和basename()都可能修改path的内容,因此在调用这些函数时最好传递副本。
这些函数可能返回指向静态分配内存的指针,该内存可能会被后续调用覆盖。 或者它们可能返回指向path的某个部分的指针,因此在函数返回的指针不再需要之前,不应修改或释放path所引用的字符串。
还有其他提示:
RETURN VALUE
dirname()和basename()都返回指向以空字符结尾的字符串的指针。 (不要将这些指针传递给free(3)。)
因此,示例代码建议做如下处理:
EXAMPLE
char *dirc, *basec, *bname, *dname; char *path = "/etc/passwd"; dirc = strdup(path); basec = strdup(path); dname = dirname(dirc); bname = basename(basec); printf("dirname=%s, basename=%s\n", dname, bname);
strdup
(strndup
)函数的手册说明:使用malloc(3)获取新字符串的内存,并可以使用free(3)释放。
所以问题是:我是否应该像
strdup
一样释放dirc和basec的内存,还是像basename
一样不释放?