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