I'm in the process of teaching myself C and I'm mistified as to what's causing the following issue: when I create an array in a method and return it as a pointer to the calling function, none of the content is correct. I've boiled down this problem to the following example:
char * makeArr(void){
    char stuff[4];
    stuff[0]='a';
    stuff[1]='b';
    stuff[2]='c';
    stuff[3]='d';
    printf("location of stuff:%p\n",stuff);
    int i;
    for(i = 0; i < 4; i++){
       printf("%c\n",stuff[i]);
    }
    return stuff;
}
int main(void){
    char* myarr;
    myarr = makeArr();
    int i;
    printf("\n");
    printf("location of myarr:%p\n", myarr);
    for(i = 0; i < 4; i++){
        printf("%c\n",myarr[i]);
    }
}
The output returns the following:
location of stuff:0028FF08
a
b
c
d
location of myarr:0028FF08
Ä
ÿ
(
(a null character)
So I've verified that the locations between the two values are the same, however the values differ. I imagine that I'm missing some critical C caveat; I could speculate it's something to do with an array decaying into a pointer or a problem with the variable's scope, but and any light that could be shed on this would be much appreciated.
 
     
     
     
     
    