I want you to look at the following two codes and tell me why the first one works and the other one doesn't.
First Code (Working):
#include <iostream>
#include <string.h>
using namespace std;
char* getCoordinates(char* AndroidID)
{//Access the database and get the South Latitude value
    //This is here is dummy data for testing
    const char* S = "27.19122859";
    const char* N = "27.19245011";
    const char* W = "31.17657602";
    const char* E = "31.17657602";
    char X[100]="";
    strncat(X, "S", 1);
    strncat(X, S, strlen(S));
    strncat(X, "N", 1);
    strncat(X, N, strlen(N));
    strncat(X, "W", 1);
    strncat(X, W, strlen(W));
    strncat(X, "E", 1);
    strncat(X, E, strlen(E));
    char* Y = X;
    cout<<Y;
    return Y;
}
int main()
{
    char* sda=NULL;
    getCoordinates(sda);
    return 0;
}
This prints out correctly the string I want to compose
S27.19122859N27.19245011W31.17657602E31.17657602
But when I try to do the same thing but print out the return value in main() things get a little weird Second Code (Not working)
#include <iostream>
#include <string.h>
using namespace std;
char* getCoordinates(char* AndroidID)
{//Access the database and get the South Latitude value
    //This is here is dummy data for testing
    const char* S = "27.19122859";
    const char* N = "27.19245011";
    const char* W = "31.17657602";
    const char* E = "31.17657602";
    char X[100]="";
    strncat(X, "S", 1);
    strncat(X, S, strlen(S));
    strncat(X, "N", 1);
    strncat(X, N, strlen(N));
    strncat(X, "W", 1);
    strncat(X, W, strlen(W));
    strncat(X, "E", 1);
    strncat(X, E, strlen(E));
    char* Y = X;
    return Y;
}
int main()
{
    char* sda=NULL;
    char* T=getCoordinates(sda);
    cout<<T;
    return 0;
}
This outputs:
S27. N27.19245011W31.`%@ \╞G ░■) $âG @■)
What is the problem here?
 
     
    