微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

双指针字符数组的strncpy问题

如何解决双指针字符数组的strncpy问题

我似乎无法弄清楚下面的代码出了什么问题:

我有一个双指针char数组,该数组使用以下方法声明和初始化:

unsigned char **buffer = (unsigned char**) malloc (num * sizeof(char*));
for ( i = 0; i < num; i++ )
{
    buffer[i] = (unsigned char*) calloc(PACKETSIZE,sizeof(char));
}

然后,我尝试将字符串复制到char*数组之一的中间部分,但是它似乎不起作用。我不确定我的错误是内存分配还是尝试复制。我知道来源char*内容

我要复制的代码(Header是一个结构,我想在buffer[i]的Header的内存地址之后写入数组,所以我在做一些指针算法)。

 strncpy ((unsigned char *)(buffer[i]+sizeof(Header)),buffer2,bytes_to_copy);

代码运行后,buffer[i]保持为空。

这是Header结构的示例:

typedef struct Head
{
    unsigned int x; 
    unsigned int y; 
} Header ;

解决方法

您的分配行:

    buffer[i] = (unsigned char*) calloc(PACKETSIZE,sizeof(char));

会将buffer[i] all 个元素设置为零。

然后,您的复制行:

    strncpy ((unsigned char *)(buffer[i]+sizeof(Header)),buffer2,bytes_to_copy);

设置第一个buffer[i]元素之后的sizeof(Header)数据。

因此,这些第一个sizeof(Header)元素将为零。因此,任何使用strxxx函数显示该缓冲区的尝试都将假定字符串为空(第一个字节为零)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。