C - dir path最后一个文件夹 - 最后是乱码

时间:2017-12-07 19:50:01

标签: c string pointers char directory

我想获取目录路径中的最后一个文件夹。

例如我有这个目录路径:

/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))打印到控制台时,它打印得很好"文件"

1 个答案:

答案 0 :(得分:3)

正如评论中所提到的,dirnamebasename都可以修改传递给它的参数。然而,您传递的是字符串文字,无法修改。尝试这样做会调用undefined behavior,在这种特殊情况下会导致打印出额外的字符。

关于字符串文字的C standard的第6.4.5节说明如下:

  

7 未指明这些数组是否为其提供的不同   元素具有适当的值。如果程序试图   修改这样的数组,行为是未定义的。

您需要将此字符串存储在数组或动态分配的缓冲区中。然后你可以修改它。

char path[] = "/home/workspace/projects/files/example.c";
basename((dirname(path)));

这里,path被声明为一个数组,这个数组是初始化的,带有一个字符串文字。它本身不是字符串文字。