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?