基本上在下面的代码中,我的最后一个数组似乎没有function1()中的内容你知道为什么我不能让这个工作吗谢谢。
#include <stdio.h>
#include <string.h>
#include<stdlib.h>
unsigned char *function1()
{
unsigned char array2[] = { 0x4a,0xb2 };
return (array2 );
}
main()
{
unsigned char temp[] = { 0xaa, 0x0b, 0x03,0x04,0x05,0x06,0x07,0x08,0x09 };
unsigned char x[2];
unsigned char *packet;
int pkt_len;
pkt_len = sizeof(temp) + sizeof(x);
packet = (unsigned char*) malloc ( pkt_len +1);
memset( packet, 0x00, pkt_len +1);
unsigned char *pointer1 = malloc ( sizeof(temp) + 1);
memset( pointer1, 0x00, sizeof(temp) +1);
memcpy (pointer1, temp, sizeof(temp) );
memcpy (packet, pointer1, sizeof(temp) );
printf("\nPacket before copy is 0x%x\n", packet[8]);
unsigned char *array2 = malloc ( sizeof (x) + 1) ;
array2 = (char *)function1();
printf("\nArray2 is 0x%x\n", array2[0]);
memcpy (packet + sizeof(temp), array2, sizeof(x) );
printf("After copy, Packet contents are 0x%x\n", packet[9]);
}
最佳答案
下面是我在代码中发现的错误。
你写的
char temp [] = { a,s,d,f,g,h};
char * pointer1, *array1;
pointer1 = &temp;
memcpy (array1, pointer1, sizeof( temp) );
现在不需要这样做了,任何数组本身的名称都是一个指针。
因此你可以简单地
char temp [] = { a,s,d,f,g,h};
char *pointer1;
memcpy (pointer1, temp , sizeof( temp) );
但是等等!
指针1是否有足够的空间存储temp[]的内容在您的代码中,您没有为pointer1分配任何空间,这可能会使您的程序崩溃。
正确的方法是
char temp [] = { 'a','s','d','f','g','h'};
char *pointer1 = malloc( sizeof(char) * (sizeof( temp) + 1) );
memset( pointer1, 0x00, sizeof( temp) + 1 );
memcpy (pointer1, temp , sizeof( temp) );
在将任何值复制到pointer1之前,我们确保它有足够的空间。
不需要强制转换malloc()retrun值为空字符添加In
pointer1 = &temp
1然后我们执行memset(),它用null填充pointer1指向的内存只是良好和健康的做法。那么你
memcpy ( pointer1 + sizeof(temp), pointer3, sizeof ( the temp array)
同样,pointer1是否有足够的空间容纳pointer3的内容您是否拥有
sizeof( temp) + 1
所指的内存区域它也会使你的程序崩溃。现在您可以使用
pointer1 + sizeof(temp)
或在早期使用realloc()
为pointer1分配更大的空间。为什么在这里你不认为它应该有pointer3中的字节数吗?
最后在
malloc()
的定义中char *pointer2, *array2;
// Now i need to have pointer2 point to contents of array2.
pointer2 = &temp2;
return pointer2
sizeof ( the temp array)
做什么没有什么!然后应该把它取下来。返回使用
return temp2;
这意味着
function1()
也是无用的。希望有帮助。