【发布时间】:2014-04-07 19:29:13
【问题描述】:
我想知道与路径组件连接相关的问题,考虑到由于连接不当引入的过多斜杠(如"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"。现在,这是标准行为吗?我可以依赖它吗,还是应该明确检查路径组件以确保它们格式正确?
【问题讨论】: