I am trying to print the integer value of each character in a given string using a function. When I pass a string to this function, it converts each character in the given string to an integer and then saves it to a result array. I have also created an array of pointers which will hold the address of each character's corresponding integer. But when I return this array of pointers, I am not able to print all integer values correctly.
#include <stdio.h>
int *c2i(char *str); 
int main(){
    char s[20];
    int *p, i;
    printf("Enter your string:\n");
    scanf("%s", s);
    p=c2i(s);
    for(i=0; i<4; i++){
        printf("\n%d\t%d\n", *p, p);
        p++;
    }
    return 0;
}
int *c2i(char *str){
    int i=0, result[20], *ptr[20];
    while(*(str+i)!='\0'){
        result[i]=*(str+i) & 0xff;
        ptr[i]=&result[i];
        i++;
    }
    printf("%d %d %d %d %d %d %d %d", *ptr[0], *ptr[1], *ptr[2], *ptr[3], ptr[0], ptr[1], ptr[2], ptr[3]);
    return *ptr;
}
I have included many printf statements just for debugging purposes. The output of the program when I try to run the code above is:
Enter your string:
abcd
97 98 99 100 6356588 6356592 6356596 6356600
97 6356588
1999382056 6356592
20 6356596
1 6356600
I am only getting the first value correctly when I print it in the main() function. When I increment the pointer and try to print the next values, I am getting garbage results. I can see that the address is the same but the values have been corrupted. What am I doing wrong here?
 
     
     
     
    
