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

有帮助吗?

解决方案

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

您将生成的最后一个字符视为指针并尝试写入它。也许你的意思是:

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

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top