Pregunta

Tengo esta estructura de la que estoy tratando de inicializar utilizando el siguiente código.Se pone error de tiempo de ejecución cuando se intenta inicializar "finger_print"

Lo que está mal con él?

typedef struct fpinfo
{
    unsigned long chunk_offset;
    unsigned long chunk_length;
    unsigned char fing_print[33];

}fpinfo;

la función:

struct fpinfo* InitHTable(struct fpinfo ht[][B_ENTRIES])
{
    unsigned char garb[33]={0};

        for (int j = 0; j < BUCKETS; ++j) 
        {
            for (int k = 0; k < B_ENTRIES; ++k)
            {
                ht[j][k].chunk_offset=0;
                ht[j][k].chunk_length=0;
                strcpy((char*)ht[j][k].fing_print[32],(const char*)garb);
                //ht[j][k].fing_print[32]=0;
            }
        }
        curr_tanker=1;
        return &ht[0][0];
}

Es el mismo con strncpy()

¿Fue útil?

Solución

strcpy((char*)ht[j][k].fing_print[32],(const char*)garb);

Se está tratando de que el último carácter de fing_print como un puntero, y tratando de escribir en él.Quizás quiso decir:

strcpy((char*)ht[j][k].fing_print,(const char*)garb);

Otros consejos

Use strncpy Si desea especificar el número de caracteres que deben sercopiado.Reemplace estas líneas:

strcpy((char*)ht[j][k].fing_print[32],(const char*)garb);
//ht[j][k].fing_print[32]=0;

con estos:

strncpy((char*)ht[j][k].fing_print, (const char*)garb, 32);
ht[j][k].fing_print[32] = '\0';

La declaración de strcpy((char*)ht[j][k].fing_print[32],(const char*)garb); no tiene sentido.Se tarda elemento 32 de la fing_print matriz, se interpreta como una dirección, y trata de escribir el contenido de garb a esa dirección (que debe tener ningún efecto secundario en absoluto, porque garb sólo contiene ceros, y es considerado como un 0-longitud de la cadena strcpy()).

Si desea establecer ht[j][k].fing_print para todos los ceros, el uso de memset(ht[j][k].fing_print, 0, sizeof(ht[j][k].fing_print)).

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