我正在开发一个程序,它使用realpath()来获取文件的绝对路径.不幸的是,这个函数需要一个字符串缓冲区,它预计会非常大,以至于当这个应用程序必须在多个平台上运行时,这个缓冲区就不安全了.是否有这个功能的安全版本,可以避免缓冲区溢出问题,可能使用动态内存分配?
R..*_*R.. 20
有关安全和便携使用的信息,请参见此处realpath:
http://www.opengroup.org/onlinepubs/9699919799/functions/realpath.html
基本上,现代标准允许您传递NULL指针,realpath并将分配适当长度的缓冲区.如果您想要移植到不支持此标准的旧系统,只需检查#ifdef PATH_MAX并使用长度固定大小的缓冲区PATH_MAX.据我所知,没有遗留系统缺少常量PATH_MAX但不支持NULL参数realpath.
Eva*_*ran 14
从联机帮助页:
如果resolve_path指定为NULL,则realpath()使用malloc(3)分配最多为PATH_MAX字节的缓冲区来保存已解析的路径名,并返回指向此缓冲区的指针.调用者应使用free(3)使用free(3).buffer释放此缓冲区.
所以看起来你可以这样做:
char *real_path = realpath(path, NULL);
// use real_path
free(real_path);
Run Code Online (Sandbox Code Playgroud)