我想使用 POSIX 的basename
功能(而不是 GNU 的)。
从手册页:
dirname() 和 basename() 都可以修改 path 的内容,因此在调用这些函数之一时可能需要传递一个副本。
这些函数可能会返回指向静态分配内存的指针,这些指针可能会被后续调用覆盖。 或者,它们可能会返回指向 path 某些部分的指针,因此在不再需要函数返回的指针之前,不应修改或释放 path 引用的字符串。
它还说:
返回值
dirname() 和 basename() 都返回指向以空字符结尾的字符串的指针。(不要将这些指针传递给 free (3)。)
因此,该示例建议如下:
例子
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) 释放。
所以问题是:我应该释放 dirc 和 basec(根据strdup
)还是不释放(根据basename
)?