C realpath function doesn't work for strings defined in the source file

Viewed 1748

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?

2 Answers
Related