【发布时间】:2017-06-01 15:08:43
【问题描述】:
realpath 函数有一个奇怪的问题。该函数在给定作为程序参数接收的字符串时起作用,但在给定我在源代码中定义的字符串时会失败。这是一个简单的程序:
#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
int main(int argc, const char* argv[])
{
char* fullpath = (char*)malloc(PATH_MAX);
if(realpath(argv[1], fullpath) == NULL)
{
printf("Failed\n");
}
else
{
printf("%s\n", fullpath);
}
}
当我使用参数~/Desktop/file(file 存在并且是一个常规文件)运行它时,我得到了预期的输出
/home/<username>/Desktop/file
这是另一个版本的程序:
#include <stdlib.h>
#include <limits.h>
#include <stdio.h>
int main(int argc, const char* argv[])
{
const char* path = "~/Desktop/file";
char* fullpath = (char*)malloc(PATH_MAX);
if(realpath(path, fullpath) == NULL)
{
printf("Failed\n");
}
else
{
printf("%s\n", fullpath);
}
}
当我运行这个程序时,我得到了输出
Failed
为什么第二个失败了?
【问题讨论】:
-
与你的问题无关,但你为什么要动态分配
fullpath?为什么不是数组? -
至于你的问题,你有没有试过把
argv[1]打印出来看看是什么?并在通话失败时检查errno?我还建议您阅读therealpathmanual page。