欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C/C++解析文件名和目錄路徑的方法

 更新時(shí)間:2024年10月10日 11:58:40   作者:三玖誒  
#include <libgen.h> 是一個(gè) C/C++ 語(yǔ)言的頭文件,主要用于字符串處理,特別是在處理文件路徑時(shí),它提供了一些函數(shù)來(lái)幫助你解析文件名和目錄路徑,本文就給大家介紹一下C/C++解析文件名和目錄路徑的方法,需要的朋友可以參考下

#include <libgen.h> 是一個(gè) C/C++ 語(yǔ)言的頭文件,主要用于字符串處理,特別是在處理文件路徑時(shí)。它提供了一些函數(shù)來(lái)幫助你解析文件名和目錄路徑。

主要函數(shù)

以下是 libgen.h 中一些常見(jiàn)的函數(shù):

basename(char *path):

  • 功能:返回給定路徑中的基本文件名(去掉路徑部分)。
  • 示例:
#include <stdio.h>
#include <libgen.h>

int main() {
    char path[] = "/home/user/file.txt";
    printf("Base name: %s\n", basename(path)); // 輸出: "file.txt"
    return 0;
}

dirname(char *path):

  • 功能:返回給定路徑的目錄部分(去掉文件名)。
  • 示例:
#include <stdio.h>
#include <libgen.h>

int main() {
    char path[] = "/home/user/file.txt";
    printf("Directory name: %s\n", dirname(path)); // 輸出: "/home/user"
    return 0;
}

使用注意事項(xiàng)

  • 修改輸入字符串:這些函數(shù)通常會(huì)修改輸入的字符串(即 path 參數(shù))。因此,傳入的字符串應(yīng)該是可修改的(通常是數(shù)組,而不是字符串常量)。
  • 返回的指針:返回的指針指向的是傳入的參數(shù),因此如果之后再次使用相同的 path,需要重新設(shè)置。
  • 不適用于復(fù)雜路徑basename 和 dirname 對(duì)于某些復(fù)雜的路徑(例如包含多個(gè)連續(xù)斜杠的路徑或者以斜杠結(jié)尾的路徑)可能無(wú)法提供預(yù)期的結(jié)果。

示例程序

下面是一個(gè)完整的程序,演示了如何使用 basename 和 dirname

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

int main() {
    char path[] = "/home/user/file.txt";

    // 復(fù)制原始字符串以避免 basename/dirname 修改它
    char path_copy[256];
    strncpy(path_copy, path, sizeof(path_copy));

    printf("Original path: %s\n", path);
    printf("Base name: %s\n", basename(path_copy)); // 輸出: "file.txt"

    // 重新復(fù)制原始字符串以獲取目錄名
    strncpy(path_copy, path, sizeof(path_copy));
    printf("Directory name: %s\n", dirname(path_copy)); // 輸出: "/home/user"

    return 0;
}

總結(jié)

libgen.h 提供的 basename 和 dirname 函數(shù)非常方便,可以有效地幫助處理和解析文件路徑。在進(jìn)行文件操作時(shí),合理使用這兩個(gè)函數(shù)可以簡(jiǎn)化你的代碼。

到此這篇關(guān)于C/C++解析文件名和目錄路徑的方法的文章就介紹到這了,更多相關(guān)C/C++解析文件名和目錄路徑內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(91.解碼方法)

    C++實(shí)現(xiàn)LeetCode(91.解碼方法)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(91.解碼方法),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 仿現(xiàn)代C++智能指針實(shí)現(xiàn)引用計(jì)數(shù)

    仿現(xiàn)代C++智能指針實(shí)現(xiàn)引用計(jì)數(shù)

    這篇文章主要為大家詳細(xì)介紹了如何仿現(xiàn)代C++智能指針實(shí)現(xiàn)引用計(jì)數(shù),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以了解下
    2024-03-03
  • c++利用stl set_difference對(duì)車輛進(jìn)出區(qū)域進(jìn)行判定

    c++利用stl set_difference對(duì)車輛進(jìn)出區(qū)域進(jìn)行判定

    這篇文章主要介紹了set_difference,用于求兩個(gè)集合的差集,結(jié)果集合中包含所有屬于第一個(gè)集合但不屬于第二個(gè)集合的元素,需要的朋友可以參考下
    2017-03-03
  • C語(yǔ)言實(shí)現(xiàn)通訊錄小項(xiàng)目

    C語(yǔ)言實(shí)現(xiàn)通訊錄小項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)通訊錄小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 基于Qt和Opencv實(shí)現(xiàn)二維碼解析

    基于Qt和Opencv實(shí)現(xiàn)二維碼解析

    這篇文章主要為大家詳細(xì)介紹了如何利用?Qt?和?OpenCV?實(shí)現(xiàn)一個(gè)可從視頻和圖片中檢測(cè)二維碼的軟件,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • C語(yǔ)言 數(shù)組指針詳解及示例代碼

    C語(yǔ)言 數(shù)組指針詳解及示例代碼

    本文主要介紹C語(yǔ)言 數(shù)組指針,這里整理了相關(guān)資料并附示例待會(huì)及實(shí)現(xiàn)結(jié)果,幫助大家學(xué)習(xí)C語(yǔ)言中指針的知識(shí),有需要學(xué)習(xí)此部分內(nèi)容的朋友可以參考下
    2016-08-08
  • C語(yǔ)言 指針的初始化賦值案例詳解

    C語(yǔ)言 指針的初始化賦值案例詳解

    這篇文章主要介紹了C語(yǔ)言 指針的初始化賦值案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語(yǔ)言中6組指針和自增運(yùn)算符結(jié)合方式的運(yùn)算順序問(wèn)題

    C語(yǔ)言中6組指針和自增運(yùn)算符結(jié)合方式的運(yùn)算順序問(wèn)題

    本文通過(guò)代碼實(shí)現(xiàn)分析了6種組合:* p++,(* p)++,* (p++),++* p,++( * p), * (++p),需要的朋友可以參考下
    2015-07-07
  • typedef和#define的用法以及區(qū)別

    typedef和#define的用法以及區(qū)別

    以下是對(duì)C/C++語(yǔ)言中,typedef和#define的用法以及區(qū)別進(jìn)行了詳細(xì)的介紹,需要的朋友可以過(guò)來(lái)參考下
    2013-10-10
  • 詳解C語(yǔ)言內(nèi)核字符串拷貝與比較

    詳解C語(yǔ)言內(nèi)核字符串拷貝與比較

    本文將探索一下字符串的拷貝與比較,與應(yīng)用層不同內(nèi)核字符串拷貝與比較也需要使用內(nèi)核專用的API函數(shù),字符串的拷貝往往伴隨有內(nèi)核內(nèi)存分配,我們將首先簡(jiǎn)單介紹內(nèi)核如何分配堆空間,然后再以此為契機(jī)簡(jiǎn)介字符串的拷貝與比較
    2022-09-09

最新評(píng)論