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.

Advertencia de compilación: convirtiendo de entero a puntero de tamaño diferente.

Tengo muy poco conocimiento en c.

Al compilar, obtengo esta advertencia:

convirtiendo en puntero desde entero de tamaño diferente

strcpy(aux, (char*)valDate(argv[7]) );

Al ejecutar el archivo compilado, obtengo este error: violación de segmentación.

Función valDate:

char * valDate(char date)
{
char fecha[9];
sprintf(fecha,”%.4s%.2s%.2s”, &date[1], &date[6], &date[9]);
fecha[8]=’\0′;
return (char
)fecha;
}

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándonos en el mensaje de advertencia y error que proporcionaste, parece que hay un problema con la conversión de un entero a un puntero durante la función strcpy. Esto podría potencialmente llevar a una violación de segmentación al ejecutar el archivo compilado.

    Sin ver el código completo ni entender el contexto en el que se está utilizando la función valDate, es difícil proporcionar una solución definitiva al problema. Sin embargo, una posible razón para esta advertencia y error es que la función valDate está devolviendo un puntero a una variable local (fecha) que queda fuera de alcance una vez que la función retorna. Esto significa que el puntero que se pasa a la función strcpy podría estar apuntando a memoria inválida, lo que puede causar una violación de segmentación.

    Para solucionar este problema, podrías intentar asignar memoria para la variable en la función valDate usando malloc o crear la variable fuera de la función y pasarla como parámetro. Alternativamente, podrías modificar la línea de strcpy para usar strncpy y especificar el número máximo de caracteres a copiar para evitar sobrescribir memoria.

    Nuevamente, sin más contexto y código, es difícil proporcionar una respuesta definitiva, pero estos pasos podrían ayudar a resolver los problemas que estás viendo.

Comments are closed.