我想获取目录路径中的最后一个文件夹。
例如我有这个目录路径:
/home/workspace/projects/files/example.c
我希望得到"文件"
我正在使用
basename((dirname("/home/workspace/projects/files/example.c")));
我想导出"文件"到.csv文件,我最后得到了胡言乱语,像"files�"
更新 我也试过这个:
char * path = strdup(file);
basename(dirname(path));
char *文件指向" /home/workspace/projects/files/example.c" 并且它也不起作用,"文件"仍然用垃圾写入.csv,但是当我将basename(dirname(file))打印到控制台时,它打印得很好"文件"
答案 0 :(得分:3)
正如评论中所提到的,dirname
和basename
都可以修改传递给它的参数。然而,您传递的是字符串文字,无法修改。尝试这样做会调用undefined behavior,在这种特殊情况下会导致打印出额外的字符。
关于字符串文字的C standard的第6.4.5节说明如下:
7 未指明这些数组是否为其提供的不同 元素具有适当的值。如果程序试图 修改这样的数组,行为是未定义的。
您需要将此字符串存储在数组或动态分配的缓冲区中。然后你可以修改它。
char path[] = "/home/workspace/projects/files/example.c";
basename((dirname(path)));
这里,path
被声明为一个数组,这个数组是初始化的,带有一个字符串文字。它本身不是字符串文字。