Pergunta

Eu tenho essa estrutura que estou tentando inicializar usando o código a seguir.Ocorre um erro de tempo de execução ao tentar inicializar "finger_print"

O que está errado com isso?

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

}fpinfo;

a função:

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

É o mesmo com strncpy()

Foi útil?

Solução

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

Você está tratando o último personagem de fing_print como um ponteiro e tentando escrever nele.Talvez você quis dizer:

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

Outras dicas

Usar forte se você deseja especificar o número de caracteres que devem ser copiados.Substitua estas linhas:

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

com estas:

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

A declaração strcpy((char*)ht[j][k].fing_print[32],(const char*)garb); não faz sentido.Leva o elemento 32 do fing_print array, interpreta isso como um endereço e tenta escrever o conteúdo de garb para esse endereço (o que não deve ter nenhum efeito colateral, porque garb contém apenas zeros e é considerada uma string de comprimento 0 por strcpy()).

Se você quiser definir ht[j][k].fing_print para todos os zeros, use memset(ht[j][k].fing_print, 0, sizeof(ht[j][k].fing_print)).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top