gpt4 book ai didi

c - 处理过多的路径分隔符

转载 作者:太空狗 更新时间:2023-10-29 11:37:52 27 4
gpt4 key购买 nike

我想知道与路径组件串联相关的问题,考虑到由于引入过多的斜线(如 "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/栏”。现在,这是标准行为吗?我可以依赖它吗?还是我仍然应该显式检查路径组件以确保它们的格式正确?

最佳答案

它是标准的(POSIX,2004):

3.266 Pathname

A character string that is used to identify a file. In the context of IEEE Std 1003.1-2001, a pathname consists of, at most, {PATH_MAX} bytes, including the terminating null byte. It has an optional beginning slash, followed by zero or more filenames separated by slashes. A pathname may optionally contain one or more trailing slashes. Multiple successive slashes are considered to be the same as one slash.

2013 年修订版有类似的措辞,但定义了确切的路径名 //(两个斜线,没有其他)实现。

关于c - 处理过多的路径分隔符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22202852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com