strcpy() 产生错误
-
13-11-2019 - |
题
我有这个结构,我正在尝试使用以下代码进行初始化。尝试初始化“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))
.
不隶属于 StackOverflow