首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >strcpy()产生错误

strcpy()产生错误
EN

Stack Overflow用户
提问于 2012-02-27 21:51:07
回答 3查看 263关注 0票数 0

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

它有什么问题?

代码语言:javascript
复制
typedef struct fpinfo
{
    unsigned long chunk_offset;
    unsigned long chunk_length;
    unsigned char fing_print[33];

}fpinfo;

函数:

代码语言:javascript
复制
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()相同。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-27 21:53:26

代码语言:javascript
复制
strcpy((char*)ht[j][k].fing_print[32],(const char*)garb);

您正在将fing_print的最后一个字符视为指针,并尝试向其写入数据。也许你的意思是:

代码语言:javascript
复制
strcpy((char*)ht[j][k].fing_print,(const char*)garb);
票数 3
EN

Stack Overflow用户

发布于 2012-02-27 21:54:08

如果要指定应复制的字符数,请使用strncpy。替换这些行:

代码语言:javascript
复制
strcpy((char*)ht[j][k].fing_print[32],(const char*)garb);
//ht[j][k].fing_print[32]=0;

有了这些:

代码语言:javascript
复制
strncpy((char*)ht[j][k].fing_print, (const char*)garb, 32);
ht[j][k].fing_print[32] = '\0';
票数 1
EN

Stack Overflow用户

发布于 2012-02-27 21:58:45

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9466107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档