C语言自己实现xbasename,获取文件名

要在 C 语言中实现一个类似于 `basename` 的函数 `xbasename`,以获取文件路径中的文件名,可以使用字符串操作函数。以下是一个示例实现:

 ```c

#include <stdio.h>
#include <string.h>

// xbasename: 获取文件路径中的文件名
char* xbasename(char* path) {
    // 如果路径为空,返回空字符串
    if (path == NULL || *path == '\0') {
        return "";
    }

    // 从路径末尾开始向前查找最后一个路径分隔符
    char* base = path + strlen(path) - 1;
    while (base > path && *base == '/') {
        base--;  // 跳过末尾的路径分隔符
    }

    // 查找最后一个路径分隔符
    while (base > path && *(base - 1) != '/') {
        base--;
    }

    return base;
}

int main() {
    char path1[] = "/usr/local/bin/somefile";
    char path2[] = "anotherfile";
    char path3[] = "/";

    printf("Path: %s, Filename: %s\n", path1, xbasename(path1));
    printf("Path: %s, Filename: %s\n", path2, xbasename(path2));
    printf("Path: %s, Filename: %s\n", path3, xbasename(path3));

    return 0;
}


```

### 解释

1. **检查空路径**: 如果路径为空或只包含空终止符,函数返回一个空字符串。
   
2. **跳过末尾的路径分隔符**: 从路径的末尾开始向前查找,跳过可能存在的多个末尾路径分隔符 `/`。

3. **查找文件名的开始位置**: 从最后一个非 `/` 字符开始,向前查找直到找到一个路径分隔符 `/` 或到达字符串的开头。这样可以找到文件名的起始位置。

4. **返回文件名**: 返回找到的文件名部分。

### 测试示例

在 `main` 函数中,有三个测试路径:
- `/usr/local/bin/somefile`,应该返回 `somefile`。
- `anotherfile`,应该返回 `anotherfile`。
- `/`,应该返回空字符串,因为路径只包含一个路径分隔符。

这个实现处理了路径中可能存在的末尾路径分隔符,并正确识别文件名部分。根据需要可以进一步扩展处理更复杂的路径格式。

或者直接使用C语言的strstr函数,实现更加简单

const char *basename(const char *path)
{
    char *p = strstr(path, '/');//查找最后一个分隔符位置
    if(p != NULL) {
        return p+1;
    }
    return path;
}

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值