基本上在下面的代码中,我的最后一个数组似乎没有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值为空字符添加Inpointer1 = &temp1然后我们执行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()也是无用的。
希望有帮助。

08-26 19:19
查看更多