0

我有这个结构,我正在尝试使用以下代码对其进行初始化。尝试初始化“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() 相同

4

3 回答 3

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

您将 的最后一个字符fing_print视为指针并尝试对其进行写入。也许你的意思是:

strcpy((char*)ht[j][k].fing_print,(const char*)garb);
于 2012-02-27T13:53:26.300 回答
1

如果要指定应复制的字符数,请使用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';
于 2012-02-27T13:54:07.643 回答
0

声明strcpy((char*)ht[j][k].fing_print[32],(const char*)garb);没有意义。它获取fing_print数组的第 32 个元素,将其解释为地址,并尝试将 的内容写入该garb地址(这应该没有任何副作用,因为garb只包含零,并且被 视为 0 长度字符串strcpy()) .

如果要设置ht[j][k].fing_print为全零,请使用memset(ht[j][k].fing_print, 0, sizeof(ht[j][k].fing_print)).

于 2012-02-27T13:58:44.770 回答