Pregunta

Hola chicos estoy tratando de averiguar cómo punteros son devueltos por strcat (), así que he intentado implementar mi propia strcat () para ver cómo funciona. El siguiente es el código para mystrcat (), que funciona como el strcat real ():

char *mystrcat(char *destination, char *source)
{
    char *str = destination;

    while (*str != '\0')
    {
        str++;
    }

    while (*source != '\0')
    {
        *str = *source;
        str++;
        source++;
    }
    *str = '\0';

    return str;
}

Así que digamos que en mi main (), tengo

char string[BUFSIZ];
mystrcat(string, "hello");
printf("%s\n", string);

La salida sería

hello

como se esperaba. Lo que no entiendo es cómo devolver la dirección de la variable local, str, mágicamente hacer que la variable, una cadena razón para ello y también por qué es la variable, str, no se eliminan cuando finaliza la función.

¿Fue útil?

Solución

Usted no está devolviendo la dirección de la variable local. Usted está volviendo el valor de la variable local. Puesto que la variable en cuestión es un puntero, su valor pasa a ser una dirección. La dirección que se contiene en los puntos variables str en el bloque de memoria proporcionada por la destination argumento.

Lo que parece ser malentendido es que esto:

char* str = destination;

no crea una copia de la cadena destination. Se crea un puntero llamado str que los puntos en la misma posición de memoria que los puntos a destination. Cuando se utiliza str para manipular los personajes en ese bloque de memoria, la cadena representada por destination también se modifica, debido str y el punto destination en el exactamente la misma cadena de caracteres en la memoria. Eso es lo que "mágicamente actualizaciones" el parámetro.

Otros consejos

str es un puntero a la cadena que se pasa en (destino), por lo que está modificando su string variable original desde dentro de su función strcat.

El str puntero no se borran al final de la rutina, pero no se necesita más.

Por cierto, es confuso utilizar la palabra "cadena" como el nombre de una variable, porque muchos idiomas se reservan string como palabra clave.

La primera línea de la función, que está asignando * str a ser el mismo que * destino. En efecto, cuando regrese, usted está volviendo * destino, lo que es lo mismo que * str.

No se asigna memoria, por lo que debe ser eliminado sin memoria.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top