繁体   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