memcpy的未定义行为

时间:2014-05-01 08:21:06

标签: c

我正在使用memcpy

复制字符串
 function(uint8 *data)
   {
      uint8 buffer[9];
      uint8 i = 0;
      /*some long calculation and segregation of data*/
      i = 7;
      memset(buffer, 0, 9);
      memcpy(buffer, &data[i], 8);
      printf(Buffer "%s\n", buffer);
      printf(data "%s\n", &data[i]);
    }

我得到的结果是

buffer 00 A1 Ef 45 87 E0 00 12
data   F1 A1 Ef 45 87 E0 00 12

第一个角色是00而不是F1。请一些人帮我解决这个简单的问题

1 个答案:

答案 0 :(得分:5)

memcpy需要指向缓冲区的指针:

void * memcpy ( void * destination, const void * source, size_t num );

你的来源是双指针,我想你想要的是:

memcpy(buffer, data, 8); //since data is the pointer to your actual data

正如@TripeHound所指出的那样:

printf(data "%s\n", data); // not &data

是你需要的。