strcpy () создает ошибку - PullRequest
       65

strcpy () создает ошибку

0 голосов
/ 27 февраля 2012

У меня есть эта структура, которую я пытаюсь инициализировать, используя следующий код.Он получает ошибку времени выполнения при попытке инициализации «finger_print»

Что с ним не так?

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

}fpinfo;

функция:

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

То же самое сstrncpy ()

Ответы [ 3 ]

3 голосов
/ 27 февраля 2012
strcpy((char*)ht[j][k].fing_print[32],(const char*)garb);

Вы рассматриваете последний символ fing_print как указатель и пытаетесь записать его. Возможно, вы имели в виду:

strcpy((char*)ht[j][k].fing_print,(const char*)garb);
1 голос
/ 27 февраля 2012

Используйте strncpy , если вы хотите указать количество символов, которые должны быть скопированы. Замените эти строки:

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

с этими:

strncpy((char*)ht[j][k].fing_print, (const char*)garb, 32);
ht[j][k].fing_print[32] = '\0';
0 голосов
/ 27 февраля 2012

Заявление strcpy((char*)ht[j][k].fing_print[32],(const char*)garb); не имеет смысла. Он принимает элемент 32 массива fing_print, интерпретирует его как адрес и пытается записать содержимое garb по этому адресу (что вообще не должно иметь побочных эффектов, поскольку garb содержит только нули и является strcpy()) рассматривается как строка длиной 0 *. 1006 *

Если вы хотите установить ht[j][k].fing_print для всех нулей, используйте memset(ht[j][k].fing_print, 0, sizeof(ht[j][k].fing_print)).

...