zoukankan      html  css  js  c++  java
  • linux下的函数dirname()和basename()使用

    总览
    #include <libgen.h>
    char *dirname(char *path);
    char *basename(char *path);
     
    说明
    函数以 '/' 为分隔符
     
    dirname
    获取文件的路径
    没有 '/' 的时候返回的是 "."
    注意: dirname 会修改 path中的数据
     
    basename
    获取文件的名称
     
    示例:
    path        dirname    basename
    "/usr/lib"  "/usr"     "lib"
    "/usr/"     "/"        "usr"
    "usr"       "."        "usr"
    "/"         "/"        "/"
    "."         "."        "."
    ".."        "."        ".."
    代码:
    #include <stdio.h>
    #include <stdlib.h>
    #include <libgen.h>
    #include <string.h>
     
    int main ( int argc, char *argv[] )
    {
    char *str = "/root/workdir/haha.txt";
    char buf[1024] = {0};
     
    strncpy (buf, str, strlen(str));
     
    //dirname 会修改buf中的值,所以需要一个缓冲区
    //直接调用dirname(str), 会使程序崩溃
    printf ("dirstr is:%s
    ", dirname(buf));
    printf ("dir buf is:%s
    ", buf);
     
    //basename 不会修改buf中的值,以下两次调用都是可以的
    strncpy (buf, str, strlen(str));
    //1次
    printf ("test1 basename is:%s
    ", basename(buf));
    printf ("name buf is:%s
    ", buf);
     
    //2次
    printf ("test2 basename is:%s
    ", basename(str));
     
    return 0;
    }
     

    补充:

     利用 strrchr 获取文件扩展名称(后缀)
     
    #include <stdio.h>
    #include <string.h>
    
    int main ( int argc, char *argv[] )
    {
      char *str = "/hah/test/test.hah.dd.json";
      char *suffix = strrchr (str, '.');
      printf ("suffix is:%s
    ", suffix);
      return 0;
    }   
     
     
     
  • 相关阅读:
    「SPOJ10707」Count on a tree II
    UVA 11021 /概率
    power oj/2360/Change
    POJ1613 147/思维题
    Power oj2498/DP/递推
    HDU4815/计数DP
    444A/CF
    观光公交noip<贪心>
    2014 Shanghai Invitation Contest
    POJ1734/Floyd求最小环
  • 原文地址:https://www.cnblogs.com/etangyushan/p/6560252.html
Copyright © 2011-2022 走看看