我想知道与路径组件串联有关的问题,请记住在特殊情况下,由于不正确的串联引入了过多的斜线(例如"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修订版的措辞类似,但是定义了确切的路径名//(两个斜杠,别无其他)实现。

10-07 19:32
查看更多