目前,我有一个path_concat(char* path_fragment_a, char* path_fragment_b)
功能,它只是简单地连接在一起path_fragment_a
,PATH_DIVIDER
和path_fragment_b
。 (PATH_DIVIDER在#ifdef块中是#defined,因此它在Windows上为\
,在其他任何地方都为/
。)
但我不禁想到这似乎:
os.path.join
的结果(这将是理想的,除了它的Python,而不是C ),所以我想知道是否有人知道一个更清洁/更标准的解决方案。
答案 0 :(得分:6)
首先,您应该使用snprintf
而不是连接操作来一次构造一个字符串。这是安全有效的方式。连接在脚本语言中可能是惯用的,但在C中它是低效且有害的(容易出现危险的错误)。
据说,自从DOS的第一个版本有目录(2或3;我忘记它是什么)以来,'/'
在DOS上作为路径分隔符有效,并且它始终有效在Windows上也是如此。它没有被使用的唯一原因是在DOS支持的目录之前设计的许多遗留命令行程序在其命令行解析中将'/'
解释为“切换”(选项)字符。过去20年中唯一不支持'/'
作为路径分隔符的真实世界系统是OSX之前的MacOS,我不认为这是一个可行的目标,所以在我看来,你应该总是这样使用'/'
,并避免以无偿的“可移植性”污染您的代码。
答案 1 :(得分:1)
不幸的是,标准C库中没有这样的函数来连接文件路径。你必须手动完成。
答案 2 :(得分:1)
显然,GLib有一些功能(如g_build_path
)和宏(G_DIR_SEPARATOR_S
等)。