c-双指针字符数组的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));

将CCD_ 6的所有元素设置为零。

然后,你的复制行:

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

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

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

最新更新