Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
strcpy()创建错误_C_Initialization_Runtime Error_Strcpy_Strncpy - Fatal编程技术网

strcpy()创建错误

strcpy()创建错误,c,initialization,runtime-error,strcpy,strncpy,C,Initialization,Runtime Error,Strcpy,Strncpy,我有这个结构,我正试图用下面的代码初始化它。它在尝试初始化“指纹”时出现运行时错误 怎么了 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]) { unsi

我有这个结构,我正试图用下面的代码初始化它。它在尝试初始化“指纹”时出现运行时错误

怎么了

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];
}
struct fpinfo*InitHTable(struct fpinfo ht[][B_条目])
{
无符号字符garb[33]={0};
对于(int j=0;j
与strncpy()相同

您正在将
fing\u print
的最后一个字符视为指针,并试图对其进行写入。也许你的意思是:

strcpy((char*)ht[j][k].fing_print,(const char*)garb);
您正在将
fing\u print
的最后一个字符视为指针,并试图对其进行写入。也许你的意思是:

strcpy((char*)ht[j][k].fing_print,(const char*)garb);
如果要指定应复制的字符数,请使用。更换这些线路:

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';
如果要指定应复制的字符数,请使用。更换这些线路:

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';
语句
strcpy((char*)ht[j][k].fing_print[32],(const char*)garb)没有意义。它接受
fing\u print
数组的元素32,将其解释为地址,并尝试将
garb
的内容写入该地址(这应该没有任何副作用,因为
garb
只包含零,并且被
strcpy()
视为0长度的字符串)

如果要将
ht[j][k].fing_print
设置为全零,请使用
memset(ht[j][k].fing_print,0,sizeof(ht[j][k].fing_print))
语句
strcpy((char*)ht[j][k].fing_print[32],(const char garb)没有意义。它接受
fing\u print
数组的元素32,将其解释为地址,并尝试将
garb
的内容写入该地址(这应该没有任何副作用,因为
garb
只包含零,并且被
strcpy()
视为0长度的字符串)


如果要将
ht[j][k].fing#u print
设置为全零,请使用
memset(ht[j][k].fing#u print,0,sizeof(ht[j][k].fing#u print))

更好地定义大小33
SIZE-1
@zmccord:同意。虽然strcpy函数的功能是这个问题的核心。@zmccord:allow
#define SIZE 32
SIZE+1
在声明中更直观。更好的是
#define SIZE 33
SIZE-1
@zmccord:Agree。虽然strcpy函数的功能就是这个问题所涉及的。@zmccord:allow
#在声明中定义大小32
大小+1
更直观。