我想知道与路径组件串联有关的问题,请记住在特殊情况下,由于不正确的串联引入了过多的斜线(例如"foo//bar"
中),导致路径最终无效。
但是后来我注意到Linux上有一个奇怪的行为。请参阅以下内容:
#include <stdio.h>
int main(void) {
char buf[4];
FILE *f = fopen("/tmp/bar", "w");
fwrite("bar", 1, 3, f);
fclose(f);
f = fopen("/tmp////////bar", "r");
if (f) {
fread(buf, 1, 3, f);
buf[3] = '\0';
printf("%s\n", buf);
fclose(f);
}
return 0;
}
上面的程序实际上打印
bar
,这意味着"/tmp////////bar"
隐式地还原为"/tmp/bar"
。现在,这是否是标准行为,我是否可以依靠它,还是应该仍然明确检查路径组件以确保其格式正确? 最佳答案
它是标准的(POSIX,2004年):
2013修订版的措辞类似,但是定义了确切的路径名//
(两个斜杠,别无其他)实现。