jeudi 26 février 2015

Returned array in C doesn't contain same values



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.




Aucun commentaire:

Enregistrer un commentaire