C realpath函数不';不适用于源文件中定义的字符串
我对C realpath函数不';不适用于源文件中定义的字符串,c,linux,realpath,C,Linux,Realpath,我对realpath函数有一个奇怪的问题。该函数在给定作为程序参数接收的字符串时工作,但在给定我在源代码中定义的字符串时失败。下面是一个简单的程序: #include <stdlib.h> #include <limits.h> #include <stdio.h> int main(int argc, const char* argv[]) { char* fullpath = (char*)malloc(PATH_MAX); if(rea
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);
}
}
以下是该程序的另一个版本:
#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);
}
}
为什么第二个失败了
const char* path = "~/Desktop/file";
程序中的波浪号字符(即:~
)未展开(即:替换为主目录的路径)
当您在命令行中像在第一个程序中一样将其作为参数提供时,它将被shell扩展在运行程序之前,shell将~扩展为正确的名称,这就是argv[1]中的内容
当硬编码时,它显然不是为您自动扩展名称。与您的问题无关,但您为什么动态分配
fullpath
?为什么不使用数组?至于您的问题,您是否尝试打印出argv[1]
以查看它是什么?并在呼叫失败时检查errno
?我也建议你阅读。
Failed
const char* path = "~/Desktop/file";