如何解决双指针字符数组的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 举报,一经查实,本站将立刻删除。