Pregunta

Estoy tratando de implementar

void strcpyy(char *s, char *t){
    while(*s++ = *t++){
    }
}

que es un ejemplo de K&R.La implementación debería ser bastante sencilla pero, por alguna razón, ese no es mi caso en este momento.Entonces tengo lo siguiente

int main(){
    char *mess = "hello world";
    char *mess = (char *) malloc(strlen(mess) + 1);
    char *aess;

    strcpyy(aess, mess);

    printf("%s", aess);

    return 0;
}

Cada vez que ejecuto el programa, sigo recibiendo una gran lista de errores cada vez que lo ejecuto. -Wall.Yo pensaría que para implementar y utilizar strcpyy, tendrías que asignar espacio para copiar la cadena y una vez que lo hagas, deberías poder imprimir aess que teóricamente debería contener una copia de mess.¡Cualquier ayuda sería muy apreciada!

¿Fue útil?

Solución

Siempre es una buena práctica prestar atención a los mensajes de error, especialmente al primer mensaje (otros suelen ser consecuencias del primer error).El mensaje de error seguramente indicó el número de línea correspondiente a la línea con malloc, y muy probablemente le dijo cuál es el problema allí.

Corrija su programa para que lea:

char *mess = "hello world";
char *aess = (char *) malloc(strlen(mess) + 1);

o la función completa es:

int main(){
    char *mess = "hello world";
    char *aess = (char *) malloc(strlen(mess) + 1);

    strcpyy(aess, mess);

    printf("%s", aess);

    return 0;
}

El problema es que tu línea

char *mess = (char *) malloc(strlen(mess) + 1);

sobrescribe la primera línea

char *mess = "hello world";

y la linea

char *aess;

deja la variable sin asignar.

El error de compilación se debe a que el compilador no puede elegir entre

char *mess = "hello world";

y

char *mess = (char *) malloc(strlen(mess) + 1);

los cuales introducen una nueva variable cada uno pero con el mismo nombre.

Otros consejos

El programa se verá de la siguiente manera

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

void strcpyy( char *s, const char *t )
{
    while ( *s++ = *t++ );
}

int main( void )
{
    char *t = "hello world";
    char *s = ( char * )malloc( strlen( t ) + 1 );

    strcpyy( s, t );

    printf( "%s\n", s );

    free( s );

    return 0;
}

cambiar

char *mess = "hello world";
char *mess = (char *) malloc(strlen(mess) + 1);
char *aess;

a

char *mess = "hello world";
char *aess = malloc(strlen(mess) + 1);

mess es un literal de cadena, que se mantiene en la memoria de solo lectura.lo estabas sobrescribiendo y perdiendo la cadena que querías copiar.necesitas asignar algo de espacio para el lugar donde deseas copiar los caracteres, en tu caso aess variable.Además, recuerda free(aess); al final de su programa.si no, tendrás pérdidas de memoria.

¿Por qué estás declarando y definiendo? mess ¿dos veces?nunca declares dos variables con el mismo nombre si tienen el mismo alcance, al hacer esto confundes al compilador;Recomiendo usar strdup como esto :

int main(){
char *mess = strdup("hello world");
char *aess;

strcpyy(aess, mess);

printf("%s", aess);

return 0;

}

o simplemente una matriz simple como esta

int main(){

char mess[] = "hello world";
char *aess;

strcpyy(aess, mess);

printf("%s", aess);

return 0;

}

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