簡體   English   中英

在C中連接路徑有什么好的,跨平台的方法?

[英]What's a good, cross-platform way to concatenate paths in C?

目前,我有一個path_concat(char* path_fragment_a, char* path_fragment_b)函數,它簡單地將path_fragment_aPATH_DIVIDERpath_fragment_b連接在一起。 (PATH_DIVIDER在#ifdef塊中是#defined,因此在Windows和/其他任何地方都是\\ 。)

但我不禁想到這似乎:

  • 有點像kludge。
  • 必須由一個相當常見的庫覆蓋的東西,如果可用的話會更好用,所以我不會重新發明輪子。

谷歌搜索它只是發現了很多關於Python的os.path.join的結果(這將是理想的, 除了它的Python,而不是C ),所以我想知道是否有人知道更清潔/更標准的解決方案。

首先,您應該使用snprintf而不是連接操作來一次構造一個字符串。 這是安全有效的方式。 連接在腳本語言中可能是慣用的,但在C中它是低效且有害的(容易出現危險的錯誤)。

話雖如此,自從DOS的第一個版本有目錄(2或3;我忘了它是什么)以來, '/'在DOS上作為路徑分隔符有效,並且它在Windows上也一直有效。 它沒有被使用的唯一原因是在DOS支持的目錄之前設計的許多遺留命令行程序在其命令行解析中將'/'解釋為“switch”(選項)字符。 過去20年中唯一不支持'/'作為路徑分隔符的真實世界系統是OSX之前的MacOS,我不認為這是一個可行的目標,因此在我看來,你應該總是使用'/' ,並避免以無償的“可移植性”污染您的代碼。

遺憾的是,標准C庫中沒有這樣的函數來連接文件路徑。 你必須手動完成。

顯然,GLib有一些功能(如g_build_path )和宏( G_DIR_SEPARATOR_S等)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM