Invertir cadena con punteros?

Estoy intentando revertir una cadena con una función y algunos punteros, pero no puedo obtener la función para actualizar la cadena original.

#include  #include  void rev(char* string) { char str2[strlen(string)]; char *p1; char *p2; p1 = string + strlen(string)-1; p2 = str2; while(p1 >= string) *p2++ = *p1--; *p2 = '\0'; p2 = p2 - strlen(string); string = p2; // This codesn't seem to update s1 or s2 } int main(void) { char s1[100] = "What does the fox say?"; char s2[100] = "Titanic sinks"; rev(s1); rev(s2); printf("\n\n%s\n", s1); printf("%s\n", s2); return 0; } 

La funcionalidad funciona, pero no puedo obtener las cadenas en main para actualizarse con la cadena invertida. Imo string = p2 debería actualizar la cadena al valor invertido de la misma. Lo hace, pero solo dentro de la función, no en la función principal …

También debe implementar la semántica de intercambio, de lo contrario perderá caracteres originales.

  void rev(char *s) { if (s != NULL) { int n = strlen(s) - 1; char *p1 = s; char *p2 = s + max(n, 0); while (p2 > p1) { char temp = *p1; *p1++ = *p2; *p2-- = temp; } } } 

C usa la semántica paso por valor con punteros, así como para cualquier otro valor. Cuando pasa un puntero a una función, su valor se copia a la string variable. Cualquier alteración en la string permanecerá local a la función (pero las alteraciones en los datos apuntados permanecerán). Es posible que desee devolver un puntero a los datos modificados en su lugar o modificar la cadena “en el lugar”.

Bueno, puedes cambiar esto: string = p2; a esto: strcpy(string, p2); .

Funcionará bien

También puede utilizar la función strrev . En string.h , se define como a continuación:

char * strrev (char *)

Cambia todos los caracteres de una cadena para invertir el orden, excepto el carácter nulo de terminación.

Por ejemplo, el siguiente código cambia la matriz al orden inverso y lo imprime en la pantalla:

char *a = "HELLO";

strrev(a);

printf("%s", a);