¿Es posible escribir una función que pueda revertir una cadena sin usar una cadena de búfer?

Posible duplicado:
¿Cómo revertir una cadena en lugar en c usando punteros?

La pregunta de la entrevista fue escribir una función llamada revstr que pueda tomar una cadena y revertirla sin usar una cadena de búfer, es decir, con punteros. ¿Cómo hago esto?

Iterar de principio y fin simultáneamente, intercambiar caracteres.

 void revstr(char * str) { int right = strlen(str) - 1; int left = 0; while (left < right) { char c = str[right]; str[right] = str[left]; str[left] = c; ++left; --right; } } 

Opcionalmente, puedes usar trucos xor para intercambiar sin un carácter intermedio:

 str[right] ^= str[left]; str[left] ^= str[right]; str[right] ^= str[left]; 

Esta es una forma puramente absurda de hacer un intercambio: la única razón para usar esta construcción es un requisito artificial que dice que no puede almacenar datos de cadena en variables intermedias y no puede llamar a funciones externas.

Creo que al menos necesitas una variable char para realizar operaciones de intercambio. Puedes usar algo así:

 char buf[SIZE]; int i ; char swap; for ( i = 0 ; i < SIZE / 2; i++){ swap = buf[i]; buf[i] = buf[SIZE - i]; buf[SIZE -i] = swap; }