Domanda

Ho questa struttura che sto cercando di inizializzare utilizzando il seguente codice.Ottiene un errore di esecuzione del tempo durante il tentativo di inizializzare "Finger_Print"

Cosa c'è di sbagliato in questo?

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

}fpinfo;
.

La funzione:

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];
}
.

È lo stesso con strncpy ()

È stato utile?

Soluzione

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

Stai trattando l'ultimo carattere di fing_print come puntatore e tentando di scrivere ad esso.Forse intendevi:

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

Altri suggerimenti

Usa strncpy se si desidera specificare il numero di caratteri che dovrebbero esserecopiato.Sostituisci queste linee:

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

Con questi:

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

L'istruzione strcpy((char*)ht[j][k].fing_print[32],(const char*)garb); non ha senso.Ciò elemento 32 dell'array fing_print, interpreta tale da un indirizzo e tenta di scrivere il contenuto di garb a quell'indirizzo (che non dovrebbe non avere alcun effetto collaterale, poiché garb contiene solo zeri ed è considerata una lunghezza 0String by strcpy()).

Se si desidera impostare ht[j][k].fing_print su tutti gli zeri, utilizzare memset(ht[j][k].fing_print, 0, sizeof(ht[j][k].fing_print)).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top