यहाँ the manual हवाला देते हुए:dirname(): मैनुअल गलत है?
कार्यों dirname() और basename() निर्देशिका और फ़ाइल नाम घटकों में एक अशक्त-समाप्त पथ स्ट्रिंग टूट गया। सामान्य मामले में, dirname() स्ट्रिंग को वापस देता है, लेकिन अंतिम '/', और बेसनाम() अंतिम '/' के बाद घटक देता है। ट्रेलिंग '/' वर्ण पथनाम के हिस्से के रूप में नहीं गिने जाते हैं।
और बाद में, आप इस छोटे से टेबल है:
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 आप प्रमुख मुद्दा मिल गया है और यह हवाला दिया। FYI करें वहाँ भी है कोई संबंधित समस्या # 612 के लिए एक ऑस्टिन समूह व्याख्या: http://austingroupbugs.net/view.php?id=612 –