Cadena inversa utilizando punteros.

Estoy tratando de revertir una cadena usando punteros. Cuando bash imprimir la cadena invertida en lugar de obtener DCBA, salgo solo como BA. ¿Alguien puede ayudarme en esto?

#include void reverse(char *); void main() { char str[5] = "ABCD"; reverse(str); } void reverse(char *str) { char *rev_str = str; char temp; while(*str) str++; --str; while(rev_str < str) { temp = *rev_str; *rev_str = *str; *str = temp; rev_str++; str--; } printf("reversed string is %s",str); } 

Está perdiendo el puntero al principio de la cadena, por lo que cuando lo imprime no comienza por el primer carácter, porque str ya no apunta al primer carácter. Simplemente coloque una variable de marcador de posición para mantener un puntero al principio de la cadena.

 void reverse(char *str) { char *begin = str; /* Keeps a pointer to the beginning of str */ char *rev_str = str; char temp; while(*str) str++; --str; while(rev_str < str) { temp = *rev_str; *rev_str = *str; *str = temp; rev_str++; str--; } printf("reversed string is %s\n", begin); } 
 char* strrev(chr* src) { char* dest int len=0, index=0 , rindex=0; while(*(src+len) != '\0') { len++ } rindex=len-1; while(rindex > =0) { *(dest+index) = *(src + rindex) index++; rindex--; } *(dest+index) = '\0'; return dest; }