es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Escribiendo mi propia función strcopy en C utilizando punteros

Estoy intentando crear mi propia función de copia de cadenas en C. La copia del texto funciona, sin embargo se agregan caracteres adicionales a la cadena de destino al final y no sé por qué. Estaría muy feliz de obtener una respuesta.

Aquí está mi código:

“`c
#include <stdio.h>
#include <string.h>

void copy(char *dst, char *src) {
int srcLen = strlen(src);
char *srcString = &src[0];
char *dstString = &dst[0];
for (int i = 0; i < srcLen; i++) {
*dstString++ = *srcString++;
}
printf("%s\n", dst);
}

int main() {
char srcString[] = "¡Juzgué rápidamente hebillas de marfil antiguo para el próximo premio!";
char dstString[strlen(srcString)];
copy(dstString, srcString);
}
“`</string.h></stdio.h>

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que tu array dstString no está correctamente terminado en nulo después de completar la copia. Esto probablemente se debe a que no estás asignando suficiente memoria para el array dstString.

    Cuando declaras char dstString[strlen(srcString)], estás creando un array de caracteres con el mismo tamaño que srcString. Sin embargo, también debes asegurarte de dejar espacio para el terminador nulo, que es necesario para las cadenas en C.

    Para solucionar esto, puedes asignar un byte adicional para el terminador nulo usando char dstString[strlen(srcString) + 1].

    Aquí está el código actualizado:

    #include <stdio.h>
    #include <string.h>
    
    void copy(char *dst, char *src) {
        int src_len = strlen(src);
        char *src_string = &src[0];
        char *dst_string = &dst[0];
        for (int i = 0; i < src_len; i++) {
            *dst_string++ = *src_string++;
        }
        *dst_string = '\0'; // agregar terminador nulo
        printf("%s\n", dst);
    }
    
    int main() {
        char srcString[] = "We promptly judged antique ivory buckles for the next prize!";
        char dstString[strlen(srcString) + 1]; // asignar suficiente memoria
        copy(dstString, srcString);
    }
    

    Esto debería terminar correctamente en nulo la cadena copiada y evitar que aparezcan caracteres adicionales al final.</string.h></stdio.h>

Comments are closed.