the manual引用這裏:C:中的dirname()是否錯誤?
功能目錄名()和基本名稱()破裂的空終止 路徑名字符串到目錄和文件名的組件。在通常的 的情況下,dirname()返回字符串,但不包括最終的 '/',而basename()返回最後的'/'後面的組件。 尾部的'/'字符不計算爲路徑名的一部分。
,後來,你有這樣的小桌子:
path dirname basename
"/usr/lib" "/usr" "lib"
"/usr/" "/" "usr" // wat?
"usr" "." "usr"
"/" "/" "/"
"." "." "."
".." "." ".."
爲什麼dirname("/usr/")
返回"/"
,而不是"/usr"
?
手冊中的句子告訴我,我應該得到/usr
。
我在一個虛擬程序中測試了實際結果,它的行爲就像手冊所說的那樣。
#include <libgen.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, char const *argv[])
{
const char *mydir="/usr/";
char *dummy = strdup(mydir);
char *dummy2 = strdup(mydir);
char *dname = dirname(dummy);
char *bname = basename(dummy2);
printf("mydir: '%s', dname: '%s', bname: '%s'\n", mydir, dname, bname);
free(dummy);
free(dummy2);
return 0;
}
$ ./test
mydir: '/usr/', dname: '/', bname: 'usr'
現在,我希望是:
path dirname basename
"/usr/" "/usr" "" // more consistent?
所以..任何人都明白這是怎麼回事呢?
+1你得到了關鍵點並引用了它。僅供參考,還有奧斯汀集團對相關問題#612的解釋:http://austingroupbugs.net/view.php?id=612 –