Soy un principiante en C. Estaba intentando este progtwig para revertir una cadena. ¿Alguna ayuda que está mal con eso?
#include #include char *reverse(char *); void main() { char str[]="kundan"; int len=strlen(str); char *ptr; ptr=reverse(str); printf("the reversed string is :%s",ptr); } char *reverse(str) { char *rtr=str; char qtr[10]; for(int i=len-1;i<=0;i--) { qtr=rtr+i; qtr++; } return qtr; }
No estás respetando el scope
variable. Una referencia útil sobre esto, aquí .
Por ejemplo, en reverse()
, se refiere a len
en el bucle for
. Sin embargo, len
se define en main
y, por lo tanto, no está disponible para reverse()
. (¿Esto incluso comstack?)
El valor que está devolviendo de reverse()
es un puntero a un valor de stack que solo está dentro del scope de esa función. Si bien la función de llamada, main()
, terminará con un puntero válido, la información a la que se refiere el puntero se ha salido del scope cuando se devuelve reverse()
y, por lo tanto, es volátil y está sujeta a cambios. Para este ejemplo simple, podría devolver la cadena invertida por valor, en lugar de por referencia. (Devuelva la matriz de caracteres, no un puntero a ellos).