I'm having a weird problem with the realpath
function. The function works when it is given a string received as an argument for the program, but fails when given a string that I define in the source code. Here is a simple program:
#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);
}
}
When I run this with an argument ~/Desktop/file
(file
exists and is a regular file) I get the expected output
/home/<username>/Desktop/file
Here is another version of the program:
#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);
}
}
When I run this program I get the output
Failed
Why does the second one fails?
const char* path = "~/Desktop/file";
the tilde character (i.e.: ~
) is not being expanded (e.i.: replaced with the path of your home directory) in your program.
When you provide it as an argument in the command line as in your first program, it is expanded by the shell.