¿Cómo esta función de copia C sale de su bucle?

void copy (char *source, char *dest) { while (*dest++ = *source++); } 

El carácter representado por *source se copia en el campo *dest apunta a. Para la siguiente iteración, cada puntero de carácter apunta al siguiente campo en la memoria, ¿es correcto?

¿Cuándo se detiene realmente este bucle? La única condición que se me ocurre es que no queda espacio en la memoria, pero la función debe terminar con un error, ¿no es así?

Soy completamente nuevo en C, así que perdóname las preguntas simples.

char son tipos integrales. Los tipos integrales se interpretan como condicionales de la siguiente manera:

  0 -> false Anything else -> true 

Dado que las “cadenas” en C tienen un final nulo (es decir, 0 o '\0' ) cuando llega al final de la cadena, se detiene.

El ‘resultado’ de una asignación es el valor de la mano derecha. Entonces x=1; en realidad devuelve un valor; en este caso, ‘1’.

Su código copia los caracteres hasta que encuentra el 0 al final de la cadena de source .

Su interpretación de la copia es correcta. El bucle se detiene cuando el destino al que apunta es cero, es decir, el carácter ‘\ 0’. Ver http://en.wikipedia.org/wiki/Null-terminated_string